<?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>171632</bug_id>
          
          <creation_ts>2017-05-03 16:25:23 -0700</creation_ts>
          <short_desc>[Tools] Add support for clang-tidy</short_desc>
          <delta_ts>2018-12-15 06:47:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>fujii</cc>
    
    <cc>jbedard</cc>
    
    <cc>lforschler</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304358</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-03 16:25:23 -0700</bug_when>
    <thetext>Investigate the use of clang-tidy for a linter within WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304451</commentid>
    <comment_count>1</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-03 18:22:28 -0700</bug_when>
    <thetext>To install clang-tidy you can use one of the releases, http://releases.llvm.org/download.html, or on Linux use one of the nightly packages through, http://apt.llvm.org/.

To run clang-tidy you need to be doing a CMake build using a Ninja generator and of course be using clang.

CMake can support clang-tidy through a CMake define, -DCMAKE_EXPORT_COMPILE_COMMANDS=ON. This will generate a compile_commands.json which is used by clang-tidy.

As an example the following command for JSCOnly on Linux will generate the compile_commands.json.

./Tools/Scripts/build-webkit --jsconly --cmakeargs=&quot;-DCMAKE_EXPORT_COMPILE_COMMANDS=ON&quot;

After CMake is done you can just kill the command since the compile_commands.json will be generated by the time the build starts.

If there is a specific file you would like to analyze use the following command with clang-tidy 0.5 installed through a nightly package.

clang-tidy -checks=&apos;-*,modernize*&apos; -header-filter=&apos;.*&apos; -fix -format-style=webkit -p WebKitBuild/Release/ Source/WTF/wtf/CPUTime.cpp 

If you would like to analyze everything the following can be used. Since it runs on all files in the project you can output to a file. In this command headers are not scanned.

run-clang-tidy-5.0.py -p WebKitBuild/Release &gt; clang-tidy-run-0.5.txt 2&gt;&amp;1

If you would like to apply modernize fixes you can run the following as an example.

clang-tidy -checks=&apos;-*,modernize*&apos; -header-filter=&apos;.*&apos; -fix -format-style=webkit -p WebKitBuild/Release/ Source/WTF/wtf/CPUTime.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304453</commentid>
    <comment_count>2</comment_count>
      <attachid>308997</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-03 18:23:51 -0700</bug_when>
    <thetext>Created attachment 308997
Example modernize fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304492</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-05-03 21:03:30 -0700</bug_when>
    <thetext>Last I checked, clang&apos;s idea of WebKit style was quite wrong. Has that changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304624</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-04 08:24:32 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #3)
&gt; Last I checked, clang&apos;s idea of WebKit style was quite wrong. Has that
&gt; changed?

Not since I&apos;ve last checked.  Although, I wouldn&apos;t call it &apos;quite wrong,&apos; if memory serves, there were a few minor discrepancies with spacing between if statements, I believe.

But Looking through what Don is suggesting here, this isn&apos;t Clang&apos;s WebKit style.  In fact, looking at the changes made to the Optional class, it&apos;s looking to me like that file didn&apos;t adhere to our style guidelines in the first place.

Don, if you run the webkit style checker on these changes (./Tools/Scripts/check-webkit-style), what does it say?  I could see it complaining about some of the spacing changes in Source/WTF/wtf/Optional.h.  Remember that the WebKit style checker only checks code which has changed, so it&apos;s a pretty common occurrence for code in the tree to be in violation of the style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304727</commentid>
    <comment_count>5</comment_count>
      <attachid>309070</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-04 11:40:18 -0700</bug_when>
    <thetext>Created attachment 309070
Clang format for WebKit style

Here is the formatting config for style=WebKit. It was obtained by running

clang-format -style=WebKit -dump-config &gt; .clang-format

The different options can be seen at https://clang.llvm.org/docs/ClangFormatStyleOptions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304734</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-04 11:56:08 -0700</bug_when>
    <thetext>I&apos;m sorry, I misread your first command Don.  You are using Clang&apos;s WebKit style.

I looked into using clang&apos;s WebKit style a few months ago.  I&apos;m not sure where clang is getting their specifications for WebKit style from, it was a surprise to our team that this was an option.  While clang&apos;s format options are close to what we use, they fall short with some spacing problems, which actually requires modification of clang&apos;s source to correction.  If I remember correctly, the patch you posted here actually has that issue:

constexpr constexpr_optional_base() __NOEXCEPT :, storage_(trivial_init){};

should be

constexpr constexpr_optional_base() __NOEXCEPT :, storage_(trivial_init) {};

The style checker in WebKit (./Tools/Scripts/check-webkit-style) probably flags this, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304749</commentid>
    <comment_count>7</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-04 12:08:36 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #6)
&gt; I&apos;m sorry, I misread your first command Don.  You are using Clang&apos;s WebKit
&gt; style.
&gt; 
&gt; I looked into using clang&apos;s WebKit style a few months ago.  I&apos;m not sure
&gt; where clang is getting their specifications for WebKit style from, it was a
&gt; surprise to our team that this was an option.  While clang&apos;s format options
&gt; are close to what we use, they fall short with some spacing problems, which
&gt; actually requires modification of clang&apos;s source to correction.  If I
&gt; remember correctly, the patch you posted here actually has that issue:
&gt; 
&gt; constexpr constexpr_optional_base() __NOEXCEPT :, storage_(trivial_init){};
&gt; 
&gt; should be
&gt; 
&gt; constexpr constexpr_optional_base() __NOEXCEPT :, storage_(trivial_init) {};
&gt; 
&gt; The style checker in WebKit (./Tools/Scripts/check-webkit-style) probably
&gt; flags this, no?

Yep it does flag that particular instance. Adding the diff and style checker results momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304755</commentid>
    <comment_count>8</comment_count>
      <attachid>309081</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-04 12:14:00 -0700</bug_when>
    <thetext>Created attachment 309081
Optional.h run through clang-format

Using the dumped .clang-format and running the following command

clang-format -i Source/WTF/Optional.h

I ran it directly on the file as Optional.h has a number of style violations already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304757</commentid>
    <comment_count>9</comment_count>
      <attachid>309082</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-04 12:15:39 -0700</bug_when>
    <thetext>Created attachment 309082
Style checker results

Here are the results of running it through the style checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306241</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-08 21:07:52 -0700</bug_when>
    <thetext>I&apos;m not certain I like the new format better. In general, I don&apos;t like code churns like this unless they explicitly violate our code style guideline: https://webkit.org/code-style-guidelines/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306436</commentid>
    <comment_count>11</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-05-09 10:15:00 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; I&apos;m not certain I like the new format better. In general, I don&apos;t like code
&gt; churns like this unless they explicitly violate our code style guideline:
&gt; https://webkit.org/code-style-guidelines/

Clang-tidy comes with a tool for running on a diff and not the whole file https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-tidy/tool/clang-tidy-diff.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323792</commentid>
    <comment_count>12</comment_count>
      <attachid>314089</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-28 19:17:57 -0700</bug_when>
    <thetext>Created attachment 314089
Clang tidy headers + clang format

ran the following commands

python &quot;C:\Program Files\LLVM\share\clang\run-clang-tidy.py&quot; -checks=&quot;modernize-deprecated-headers&quot; -header-filter=&quot;.*&quot; -fix -j 8 -format -p .  /Source/WTF/wtf/*

git diff -U0 --no-color HEAD^ | python &apos;C:\Program Files\LLVM\share\clang\clang-format-diff.py&apos; -i -p1 -style WebKit

Had to do some cleanup where config.h got moved below but lets see how things look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323793</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-28 19:20:13 -0700</bug_when>
    <thetext>Attachment 314089 did not pass style-queue:


ERROR: Source/WTF/wtf/Assertions.h:44:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/CheckedArithmetic.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 53 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>1488287</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-12-15 06:47:41 -0800</bug_when>
    <thetext>(In reply to Don Olmstead from Bug 192710 Comment #6)
&gt; Do we have any ideas on what clang-tidy rules should be run? I&apos;d like to run
&gt; it more often over the code base to see what it finds.
&gt; 
&gt; Fujii is working on getting clang-cl working on Windows at which point we
&gt; should be able to run it more.
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=171632 is a tracking bug for more
&gt; general support for it in WebKit.

For the recent clang-tidy bugs I&apos;ve been filing and fixing, I&apos;ve been focusing only on performance-* warnings (excluding performance-noexcept-* warnings since WebKit compiles with C++ exceptions disabled by default):

clang-tidy -header-filter=.* -checks=&apos;-*,performance-*,-performance-noexcept-*&apos; ...

I haven&apos;t tried any other checks yet.

My original intent was to find unnecessary object copies, specifically in for loops, but there were lots of other easy fixes to prevent object copies as well.

I wrote a hacky Perl script that parses xcodebuild output and then runs clang-tidy on the result to find these issues (in addition to building my own local copy of llvm/clang since Xcode&apos;s toolchains don&apos;t come with clang-tidy).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308997</attachid>
            <date>2017-05-03 18:23:51 -0700</date>
            <delta_ts>2017-05-03 18:23:51 -0700</delta_ts>
            <desc>Example modernize fixes</desc>
            <filename>example.diff</filename>
            <type>text/plain</type>
            <size>12420</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaCBiL1NvdXJjZS9XVEYvd3Rm
L0Fzc2VydGlvbnMuaAppbmRleCAzMTU4YzEwLi5jNTY4MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9Bc3NlcnRpb25zLmgKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCkBA
IC00MSwxMCArNDEsMTAgQEAKIAogI3VuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCiAjZGVmaW5l
IF9fU1REQ19GT1JNQVRfTUFDUk9TCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxz
dGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5j
bHVkZSA8Y2ludHR5cGVzPgorI2luY2x1ZGUgPGNzdGRhcmc+CisKKyNpbmNsdWRlIDxjc3RkZGVm
PgogI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KIAogI2lmIFVTRShPU19MT0cpCkBAIC0x
ODMsNyArMTgzLDcgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGR2V0QmFja3RyYWNlKHZv
aWQqKiBzdGFjaywgaW50KiBzaXplKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIFdURlJlcG9y
dEJhY2t0cmFjZSgpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGUHJpbnRCYWNrdHJhY2Uo
dm9pZCoqIHN0YWNrLCBpbnQgc2l6ZSk7CiAKLXR5cGVkZWYgdm9pZCAoKldURkNyYXNoSG9va0Z1
bmN0aW9uKSgpOwordXNpbmcgV1RGQ3Jhc2hIb29rRnVuY3Rpb24gPSB2b2lkICgqKSgpOwogV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGU2V0Q3Jhc2hIb29rKFdURkNyYXNoSG9va0Z1bmN0aW9u
KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIFdURkluc3RhbGxSZXBvcnRCYWNrdHJhY2VPbkNy
YXNoSG9vaygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oIGIvU291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaAppbmRleCA3OThkNmYwLi42
NDg5Mzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTI4LDggKzI4LDggQEAK
IAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKKyNpbmNsdWRlIDxjc3RkaW50PgogI2lu
Y2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KIAogLyogQ2hlY2tlZDxUPgpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiBjbGFzcyBSZWNv
cmRPdmVyZmxvdyB7CiBwcm90ZWN0ZWQ6CiAgICAgUmVjb3JkT3ZlcmZsb3coKQotICAgICAgICA6
IG1fb3ZlcmZsb3dlZChmYWxzZSkKKwogICAgIHsKICAgICB9CiAKQEAgLTExNSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9vdmVy
Zmxvd2VkOyB9CiAKIHByaXZhdGU6Ci0gICAgdW5zaWduZWQgY2hhciBtX292ZXJmbG93ZWQ7Cisg
ICAgdW5zaWduZWQgY2hhciBtX292ZXJmbG93ZWR7IGZhbHNlIH07CiB9OwogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgY2xhc3MgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jhc2hPbk92ZXJmbG93PiBjbGFz
cyBDaGVja2VkOwpAQCAtMjAzLDE3ICsyMDMsMTcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdl
dCwgdHlwZW5hbWUgU291cmNlPiBzdGF0aWMgaW5saW5lIGJvb2wgY29udmVydFNhZmVseShTb3UK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkIHsKLSAgICB0
eXBlZGVmIFQgQ2xlYW5UeXBlOworICAgIHVzaW5nIENsZWFuVHlwZSA9IFQ7CiAgICAgc3RhdGlj
IGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOyAgICAKIH07CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIENyYXNoT25PdmVyZmxv
dz4+IHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8VD46OkNsZWFuVHlwZSBD
bGVhblR5cGU7CisgICAgdXNpbmcgQ2xlYW5UeXBlID0gdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxU
Pjo6Q2xlYW5UeXBlOwogICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0g
MDsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVj
a2VkPFQsIFJlY29yZE92ZXJmbG93Pj4gewotICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVtb3ZlQ2hl
Y2tlZDxUPjo6Q2xlYW5UeXBlIENsZWFuVHlwZTsKKyAgICB1c2luZyBDbGVhblR5cGUgPSB0eXBl
bmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5cGU7CiAgICAgc3RhdGljIGNvbnN0IENsZWFu
VHlwZSBEZWZhdWx0VmFsdWUgPSAwOwogfTsKIApAQCAtMjIxLDMyICsyMjEsMzIgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VCwgUmVjb3JkT3Zl
cmZsb3c+PiB7CiAvLyBhdmFpbGFibGUgaW4gTVNWQwogdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIGJvb2wgdUlzQmlnZ2VyID0gKHNpemVvZihVKSA+IHNpemVvZihWKSksIGJvb2wg
c2FtZVNpemUgPSAoc2l6ZW9mKFUpID09IHNpemVvZihWKSk+IHN0cnVjdCBSZXN1bHRCYXNlOwog
dGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHRCYXNlPFUsIFYs
IHRydWUsIGZhbHNlPiB7Ci0gICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7CisgICAgdXNpbmcgUmVz
dWx0VHlwZSA9IFU7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3Ry
dWN0IFJlc3VsdEJhc2U8VSwgViwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdHlwZWRlZiBWIFJlc3Vs
dFR5cGU7CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IFY7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4gc3RydWN0IFJlc3VsdEJhc2U8VSwgVSwgZmFsc2UsIHRydWU+IHsKLSAgICB0eXBlZGVm
IFUgUmVzdWx0VHlwZTsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gVTsKIH07CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCBib29sIHVJc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VT46OmlzX3NpZ25lZCwgYm9vbCB2SXNTaWduZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PFY+Ojppc19zaWduZWQ+IHN0cnVjdCBTaWduZWRuZXNzU2VsZWN0b3I7CiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3RvcjxVLCBWLCB0cnVl
LCB0cnVlPiB7Ci0gICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7CisgICAgdXNpbmcgUmVzdWx0VHlw
ZSA9IFU7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFNp
Z25lZG5lc3NTZWxlY3RvcjxVLCBWLCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0eXBlZGVmIFUgUmVz
dWx0VHlwZTsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gVTsKIH07CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1NlbGVjdG9yPFUsIFYsIHRydWUs
IGZhbHNlPiB7Ci0gICAgdHlwZWRlZiBWIFJlc3VsdFR5cGU7CisgICAgdXNpbmcgUmVzdWx0VHlw
ZSA9IFY7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFNp
Z25lZG5lc3NTZWxlY3RvcjxVLCBWLCBmYWxzZSwgdHJ1ZT4gewotICAgIHR5cGVkZWYgVSBSZXN1
bHRUeXBlOworICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBVOwogfTsKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHRCYXNlPFUsIFYsIGZhbHNlLCB0cnVlPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EaXNhbGxvd0NUeXBlLmggYi9Tb3VyY2UvV1RG
L3d0Zi9EaXNhbGxvd0NUeXBlLmgKaW5kZXggMzA1NDRlNy4uMWRhN2Q3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvRGlzYWxsb3dDVHlwZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Rpc2Fs
bG93Q1R5cGUuaApAQCAtNDIsNyArNDIsNyBAQAogLy8gaXNhY2lpKCkuIAogI2lmICEoT1MoREFS
V0lOKSAmJiBQTEFURk9STShHVEspKSAmJiAhZGVmaW5lZChfTElCQ1BQX1ZFUlNJT04pICYmIGRl
ZmluZWQoX19HTElCQ19fKQogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxjY3R5cGU+
CiAKICN1bmRlZiBpc2FsbnVtCiAjdW5kZWYgaXNhbHBoYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvRmFzdE1hbGxvYy5oIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCmluZGV4IDUy
NWY5Y2IuLjQ4MmQ5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5k
ZWYgV1RGX0Zhc3RNYWxsb2NfaAogI2RlZmluZSBXVEZfRmFzdE1hbGxvY19oCiAKKyNpbmNsdWRl
IDxjc3RkbGliPgogI2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNzksNyArNzksNyBA
QCBXVEZfRVhQT1JUX1BSSVZBVEUgRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRp
c3RpY3MoKTsKIAogLy8gVGhpcyBkZWZpbmVzIGEgdHlwZSB3aGljaCBob2xkcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIGFuZCBpcyB0aGUgc2FtZQogLy8gc2l6ZSBhcyB0aGUgbWluaW1hbGx5IGFsaWdu
ZWQgbWVtb3J5IGFsbG9jYXRpb24uCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBBbGxvY0Fs
aWdubWVudEludGVnZXI7Cit1c2luZyBBbGxvY0FsaWdubWVudEludGVnZXIgPSB1bnNpZ25lZCBs
b25nIGxvbmc7CiAKIGlubGluZSBUcnlNYWxsb2NSZXR1cm5WYWx1ZTo6VHJ5TWFsbG9jUmV0dXJu
VmFsdWUodm9pZCogZGF0YSkKICAgICA6IG1fZGF0YShkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmluZGV4
IGRjZWYzOTQuLjQ3OThmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTI3LDExICsyNywxMSBAQAog
I2RlZmluZSBXVEZfTWF0aEV4dHJhc19oCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8Y2Zsb2F0PgogI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVk
ZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKICNpZiBPUyhTT0xBUklTKQpAQCAtMjMxLDEwICsyMzEsMTAgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaGFzVHdvT3JNb3JlQml0c1NldChUIHZhbHVlKQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHVuc2lnbmVkIGdldExTQlNldChUIHZhbHVl
KQogewotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVu
c2lnbmVkVDsKKyAgICB1c2luZyBVbnNpZ25lZFQgPSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWdu
ZWQ8VD46OnR5cGU7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKIAotICAgIFVuc2lnbmVkVCB1
bnNpZ25lZFZhbHVlID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPih2YWx1ZSk7CisgICAgYXV0byB1
bnNpZ25lZFZhbHVlID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPih2YWx1ZSk7CiAgICAgd2hpbGUg
KHVuc2lnbmVkVmFsdWUgPj49IDEpCiAgICAgICAgICsrcmVzdWx0OwogCkBAIC0zMTgsNyArMzE4
LDcgQEAgaW5saW5lIHZvaWQgZGVjb21wb3NlRG91YmxlKGRvdWJsZSBudW1iZXIsIGJvb2wmIHNp
Z24sIGludDMyX3QmIGV4cG9uZW50LCB1aW50NjQKIAogICAgIHNpZ24gPSBzdGQ6OnNpZ25iaXQo
bnVtYmVyKTsKIAotICAgIHVpbnQ2NF90IGJpdHMgPSBXVEY6OmJpdHdpc2VfY2FzdDx1aW50NjRf
dD4obnVtYmVyKTsKKyAgICBhdXRvIGJpdHMgPSBXVEY6OmJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
bnVtYmVyKTsKICAgICBleHBvbmVudCA9IChzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRzID4+IDUy
KSAmIDB4N2ZmKSAtIDB4M2ZmOwogICAgIG1hbnRpc3NhID0gYml0cyAmIDB4RkZGRkZGRkZGRkZG
RnVsbDsKIApAQCAtMzQ1LDcgKzM0NSw3IEBAIGlubGluZSB2b2lkIGRvdWJsZVRvSW50ZWdlcihk
b3VibGUgZCwgdW5zaWduZWQgbG9uZyBsb25nJiB2YWx1ZSkKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIC0yXns2NH0gPCBmbW9kVmFsdWUgPCAwLgogICAgICAgICAgICAgLy8gMCA8
IGZtb2RWYWx1ZUluVW5zaWduZWRMb25nTG9uZyA8IDJeezY0fS4gVGhpcyBjYXN0IGNhdXNlcyBu
byBsb3NzLgotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZtb2RWYWx1ZUluVW5zaWdu
ZWRMb25nTG9uZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oLWZtb2RWYWx1ZSk7
CisgICAgICAgICAgICBhdXRvIGZtb2RWYWx1ZUluVW5zaWduZWRMb25nTG9uZyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oLWZtb2RWYWx1ZSk7CiAgICAgICAgICAgICAvLyAtMSA8
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz46Om1heCgpIC0gZm1vZFZh
bHVlSW5VbnNpZ25lZExvbmdMb25nKSA8IDJeezY0fSAtIDEuCiAgICAgICAgICAgICAvLyAwIDwg
dmFsdWUgPCAyXns2NH0uCiAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgbG9uZyBsb25nPjo6bWF4KCkgLSBmbW9kVmFsdWVJblVuc2lnbmVkTG9uZ0xvbmcg
KyAxOwpAQCAtMzg4LDcgKzM4OCw3IEBAIGlubGluZSB1bnNpZ25lZCBmYXN0TG9nMih1bnNpZ25l
ZCBpKQogCiBpbmxpbmUgdW5zaWduZWQgZmFzdExvZzIodWludDY0X3QgdmFsdWUpCiB7Ci0gICAg
dW5zaWduZWQgaGlnaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSA+PiAzMik7CisgICAg
YXV0byBoaWdoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlID4+IDMyKTsKICAgICBpZiAo
aGlnaCkKICAgICAgICAgcmV0dXJuIGZhc3RMb2cyKGhpZ2gpICsgMzI7CiAgICAgcmV0dXJuIGZh
c3RMb2cyKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTW9ub3RvbmljVGltZS5oIGIvU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5o
CmluZGV4IDJkYzQ3ZWQuLjQyOWMzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01vbm90
b25pY1RpbWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmgKQEAgLTQ2LDE0
ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUg
PSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKICAgICAKICAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4g
U28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIE1vbm90
b25pY1RpbWUoKS4KLSAgICBjb25zdGV4cHIgTW9ub3RvbmljVGltZSgpIHsgfQotICAgIAorICAg
IGNvbnN0ZXhwciBNb25vdG9uaWNUaW1lKCkgPSBkZWZhdWx0OworCiAgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNj
b3JkaW5nIHRvCiAgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4gSXQg
bXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNhbWUgdGltZQogICAg
IC8vIHNvdXJjZS4KICAgICBzdGF0aWMgY29uc3RleHByIE1vbm90b25pY1RpbWUgZnJvbVJhd1Nl
Y29uZHMoZG91YmxlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWUo
dmFsdWUpOworICAgICAgICByZXR1cm4geyB2YWx1ZSB9OwogICAgIH0KICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIE1vbm90b25pY1RpbWUgbm93KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAppbmRl
eCAyYjNjN2MxLi4yYjhhNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKQEAgLTMxNSw3ICszMTUsNyBAQCB1bmlv
biBzdG9yYWdlX3QKICAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CiAgIGNvbnN0ZXhwciBzdG9y
YWdlX3QoIEFyZ3MmJi4uLiBhcmdzICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2Zvcndh
cmQ8QXJncz4oYXJncykuLi4pIHt9CiAKLSAgfnN0b3JhZ2VfdCgpe30KKyAgfnN0b3JhZ2VfdCgp
ID0gZGVmYXVsdDsKIH07CiAKIApAQCAtMzM3LDEwICszMzcsMTAgQEAgdW5pb24gY29uc3RleHBy
X3N0b3JhZ2VfdAogdGVtcGxhdGUgPGNsYXNzIFQ+CiBzdHJ1Y3Qgb3B0aW9uYWxfYmFzZQogewot
ICAgIGJvb2wgaW5pdF87CisgICAgYm9vbCBpbml0X3sgZmFsc2UgfTsKICAgICBzdG9yYWdlX3Q8
VD4gc3RvcmFnZV87CiAKLSAgICBjb25zdGV4cHIgb3B0aW9uYWxfYmFzZSgpIF9fTk9FWENFUFQg
OiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCkge307CisgICAgY29uc3RleHBy
IG9wdGlvbmFsX2Jhc2UoKSBfX05PRVhDRVBUIDosIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCl7fTsK
IAogICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBvcHRpb25hbF9iYXNlKGNvbnN0IFQmIHYpIDogaW5p
dF8odHJ1ZSksIHN0b3JhZ2VfKHYpIHt9CiAKQEAgLTM2MCwxMCArMzYwLDEwIEBAIHN0cnVjdCBv
cHRpb25hbF9iYXNlCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHN0cnVjdCBjb25zdGV4cHJfb3B0aW9u
YWxfYmFzZQogewotICAgIGJvb2wgaW5pdF87CisgICAgYm9vbCBpbml0X3sgZmFsc2UgfTsKICAg
ICBjb25zdGV4cHJfc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwogCi0gICAgY29uc3RleHByIGNvbnN0
ZXhwcl9vcHRpb25hbF9iYXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNlKSwgc3RvcmFnZV8o
dHJpdmlhbF9pbml0KSB7fTsKKyAgICBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2Uo
KSBfX05PRVhDRVBUIDosIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCl7fTsKIAogICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBjb25zdGV4cHJfb3B0aW9uYWxfYmFzZShjb25zdCBUJiB2KSA6IGluaXRfKHRy
dWUpLCBzdG9yYWdlXyh2KSB7fQogCkBAIC00MzUsMTkgKzQzNSwxOSBAQCBjbGFzcyBvcHRpb25h
bCA6IHByaXZhdGUgT3B0aW9uYWxCYXNlPFQ+CiAgIH0KIAogcHVibGljOgotICB0eXBlZGVmIFQg
dmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwgY29uc3RydWN0b3JzCi0gIGNvbnN0ZXhwciBv
cHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKSAge307Ci0gIGNvbnN0ZXhw
ciBvcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKSB7fTsK
LQotICBvcHRpb25hbChjb25zdCBvcHRpb25hbCYgcmhzKQotICA6IE9wdGlvbmFsQmFzZTxUPigp
Ci0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgOjpuZXcgKHN0YXRp
Y19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKCpyaHMpOwotICAgICAgICBPcHRpb25hbEJhc2U8
VD46OmluaXRfID0gdHJ1ZTsKLSAgICB9CisgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisKKyAg
ICAvLyAyMC41LjUuMSwgY29uc3RydWN0b3JzCisgICAgY29uc3RleHByIG9wdGlvbmFsKCkgX19O
T0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpe307CisgICAgY29uc3RleHByIG9wdGlvbmFsKG51
bGxvcHRfdCkgX19OT0VYQ0VQVCA6IE9wdGlvbmFsQmFzZTxUPigpe307CisKKyAgICBvcHRpb25h
bChjb25zdCBvcHRpb25hbCYgcmhzKQorICAgICAgICA6IE9wdGlvbmFsQmFzZTxUPigpCisgICAg
eworICAgICAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgICAgIDo6bmV3IChz
dGF0aWNfY2FzdDx2b2lkKj4oZGF0YXB0cigpKSkgVCgqcmhzKTsKKyAgICAgICAgICAgIE9wdGlv
bmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOworICAgICAgICB9CiAgIH0KIAogICBvcHRpb25hbChv
cHRpb25hbCYmIHJocykgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8VD46OnZhbHVlKQpAQCAtMTA4MywyMiArMTA4MywyNCBAQCBuYW1lc3BhY2Ugc3Rk
CiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICBzdHJ1Y3QgaGFzaDxzdGQ6Om9wdGlvbmFsPFQ+
PgogICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoPFQ+OjpyZXN1bHRfdHlwZSByZXN1bHRf
dHlwZTsKLSAgICB0eXBlZGVmIHN0ZDo6b3B0aW9uYWw8VD4gYXJndW1lbnRfdHlwZTsKKyAgICAg
IHVzaW5nIHJlc3VsdF90eXBlID0gdHlwZW5hbWUgaGFzaDxUPjo6cmVzdWx0X3R5cGU7CisgICAg
ICB1c2luZyBhcmd1bWVudF90eXBlID0gc3RkOjpvcHRpb25hbDxUPjsKIAotICAgIGNvbnN0ZXhw
ciByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3Qg
ewotICAgICAgcmV0dXJuIGFyZyA/IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7
fTsKKyAgICAgIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUg
Y29uc3QmIGFyZykgY29uc3QKKyAgICAgIHsKKyAgICAgICAgICByZXR1cm4gYXJnID8gc3RkOjpo
YXNoPFQ+e30oKmFyZykgOiByZXN1bHRfdHlwZXt9OwogICAgIH0KICAgfTsKIAogICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KICAgc3RydWN0IGhhc2g8c3RkOjpvcHRpb25hbDxUJj4+CiAgIHsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAg
IHR5cGVkZWYgc3RkOjpvcHRpb25hbDxUJj4gYXJndW1lbnRfdHlwZTsKKyAgICAgIHVzaW5nIHJl
c3VsdF90eXBlID0gdHlwZW5hbWUgaGFzaDxUPjo6cmVzdWx0X3R5cGU7CisgICAgICB1c2luZyBh
cmd1bWVudF90eXBlID0gc3RkOjpvcHRpb25hbDxUJj47CiAKLSAgICBjb25zdGV4cHIgcmVzdWx0
X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBhcmcpIGNvbnN0IHsKLSAgICAg
IHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJnKSA6IHJlc3VsdF90eXBle307CisgICAg
ICBjb25zdGV4cHIgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBh
cmcpIGNvbnN0CisgICAgICB7CisgICAgICAgICAgcmV0dXJuIGFyZyA/IHN0ZDo6aGFzaDxUPnt9
KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKICAgICB9CiAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9TZWNvbmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKaW5kZXggNDg0
ODNmMi4uYTI5MWNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU2Vjb25kcy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1NlY29uZHMuaApAQCAtMzcsOCArMzcsOCBAQCBjbGFzcyBXYWxsVGlt
ZTsKIAogY2xhc3MgU2Vjb25kcyB7CiBwdWJsaWM6Ci0gICAgY29uc3RleHByIFNlY29uZHMoKSB7
IH0KLSAgICAKKyAgICBjb25zdGV4cHIgU2Vjb25kcygpID0gZGVmYXVsdDsKKwogICAgIGV4cGxp
Y2l0IGNvbnN0ZXhwciBTZWNvbmRzKGRvdWJsZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oIGIv
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKaW5kZXggOTk3Y2QzNS4uOWFkNDg4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgKQEAgLTQwNiw3ICs0MDYsNyBAQCBzdHJ1Y3QgSXNCYXNlT2ZUZW1w
bGF0ZSA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIERldGFpbDo6SXNCYXNl
T2ZUZQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHN0cnVjdCBSZW1vdmVDVkFuZFJlZmVyZW5jZSAg
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8dHlwZW5hbWUgc3RkOjpyZW1v
dmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dHlwZSB0eXBlOworICAgIHVzaW5nIHR5cGUgPSB0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9jdjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5
cGU+Ojp0eXBlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlTGVmdCwgdHlw
ZW5hbWUgSXRlcmF0b3JUeXBlUmlnaHQsIHR5cGVuYW1lIEl0ZXJhdG9yVHlwZURzdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>309070</attachid>
            <date>2017-05-04 11:40:18 -0700</date>
            <delta_ts>2017-05-04 11:40:18 -0700</delta_ts>
            <desc>Clang format for WebKit style</desc>
            <filename>clang-format</filename>
            <type>text/plain</type>
            <size>2880</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">LS0tCkxhbmd1YWdlOiAgICAgICAgQ3BwCiMgQmFzZWRPblN0eWxlOiAgV2ViS2l0CkFjY2Vzc01v
ZGlmaWVyT2Zmc2V0OiAtNApBbGlnbkFmdGVyT3BlbkJyYWNrZXQ6IERvbnRBbGlnbgpBbGlnbkNv
bnNlY3V0aXZlQXNzaWdubWVudHM6IGZhbHNlCkFsaWduQ29uc2VjdXRpdmVEZWNsYXJhdGlvbnM6
IGZhbHNlCkFsaWduRXNjYXBlZE5ld2xpbmVzTGVmdDogZmFsc2UKQWxpZ25PcGVyYW5kczogICBm
YWxzZQpBbGlnblRyYWlsaW5nQ29tbWVudHM6IGZhbHNlCkFsbG93QWxsUGFyYW1ldGVyc09mRGVj
bGFyYXRpb25Pbk5leHRMaW5lOiB0cnVlCkFsbG93U2hvcnRCbG9ja3NPbkFTaW5nbGVMaW5lOiBm
YWxzZQpBbGxvd1Nob3J0Q2FzZUxhYmVsc09uQVNpbmdsZUxpbmU6IGZhbHNlCkFsbG93U2hvcnRG
dW5jdGlvbnNPbkFTaW5nbGVMaW5lOiBBbGwKQWxsb3dTaG9ydElmU3RhdGVtZW50c09uQVNpbmds
ZUxpbmU6IGZhbHNlCkFsbG93U2hvcnRMb29wc09uQVNpbmdsZUxpbmU6IGZhbHNlCkFsd2F5c0Jy
ZWFrQWZ0ZXJEZWZpbml0aW9uUmV0dXJuVHlwZTogTm9uZQpBbHdheXNCcmVha0FmdGVyUmV0dXJu
VHlwZTogTm9uZQpBbHdheXNCcmVha0JlZm9yZU11bHRpbGluZVN0cmluZ3M6IGZhbHNlCkFsd2F5
c0JyZWFrVGVtcGxhdGVEZWNsYXJhdGlvbnM6IGZhbHNlCkJpblBhY2tBcmd1bWVudHM6IHRydWUK
QmluUGFja1BhcmFtZXRlcnM6IHRydWUKQnJhY2VXcmFwcGluZzogICAKICBBZnRlckNsYXNzOiAg
ICAgIGZhbHNlCiAgQWZ0ZXJDb250cm9sU3RhdGVtZW50OiBmYWxzZQogIEFmdGVyRW51bTogICAg
ICAgZmFsc2UKICBBZnRlckZ1bmN0aW9uOiAgIHRydWUKICBBZnRlck5hbWVzcGFjZTogIGZhbHNl
CiAgQWZ0ZXJPYmpDRGVjbGFyYXRpb246IGZhbHNlCiAgQWZ0ZXJTdHJ1Y3Q6ICAgICBmYWxzZQog
IEFmdGVyVW5pb246ICAgICAgZmFsc2UKICBCZWZvcmVDYXRjaDogICAgIGZhbHNlCiAgQmVmb3Jl
RWxzZTogICAgICBmYWxzZQogIEluZGVudEJyYWNlczogICAgZmFsc2UKQnJlYWtCZWZvcmVCaW5h
cnlPcGVyYXRvcnM6IEFsbApCcmVha0JlZm9yZUJyYWNlczogV2ViS2l0CkJyZWFrQmVmb3JlVGVy
bmFyeU9wZXJhdG9yczogdHJ1ZQpCcmVha0NvbnN0cnVjdG9ySW5pdGlhbGl6ZXJzQmVmb3JlQ29t
bWE6IHRydWUKQnJlYWtBZnRlckphdmFGaWVsZEFubm90YXRpb25zOiBmYWxzZQpCcmVha1N0cmlu
Z0xpdGVyYWxzOiB0cnVlCkNvbHVtbkxpbWl0OiAgICAgMApDb21tZW50UHJhZ21hczogICdeIElX
WVUgcHJhZ21hOicKQnJlYWtCZWZvcmVJbmhlcml0YW5jZUNvbW1hOiBmYWxzZQpDb25zdHJ1Y3Rv
ckluaXRpYWxpemVyQWxsT25PbmVMaW5lT3JPbmVQZXJMaW5lOiBmYWxzZQpDb25zdHJ1Y3Rvcklu
aXRpYWxpemVySW5kZW50V2lkdGg6IDQKQ29udGludWF0aW9uSW5kZW50V2lkdGg6IDQKQ3BwMTFC
cmFjZWRMaXN0U3R5bGU6IGZhbHNlCkRlcml2ZVBvaW50ZXJBbGlnbm1lbnQ6IGZhbHNlCkRpc2Fi
bGVGb3JtYXQ6ICAgZmFsc2UKRXhwZXJpbWVudGFsQXV0b0RldGVjdEJpblBhY2tpbmc6IGZhbHNl
CkZpeE5hbWVzcGFjZUNvbW1lbnRzOiBmYWxzZQpGb3JFYWNoTWFjcm9zOiAgIFsgZm9yZWFjaCwg
UV9GT1JFQUNILCBCT09TVF9GT1JFQUNIIF0KSW5jbHVkZUNhdGVnb3JpZXM6IAogIC0gUmVnZXg6
ICAgICAgICAgICAnXiIobGx2bXxsbHZtLWN8Y2xhbmd8Y2xhbmctYykvJwogICAgUHJpb3JpdHk6
ICAgICAgICAyCiAgLSBSZWdleDogICAgICAgICAgICdeKDx8IihndGVzdHxpc2x8anNvbikvKScK
ICAgIFByaW9yaXR5OiAgICAgICAgMwogIC0gUmVnZXg6ICAgICAgICAgICAnLionCiAgICBQcmlv
cml0eTogICAgICAgIDEKSW5jbHVkZUlzTWFpblJlZ2V4OiAnJCcKSW5kZW50Q2FzZUxhYmVsczog
ZmFsc2UKSW5kZW50V2lkdGg6ICAgICA0CkluZGVudFdyYXBwZWRGdW5jdGlvbk5hbWVzOiBmYWxz
ZQpKYXZhU2NyaXB0UXVvdGVzOiBMZWF2ZQpKYXZhU2NyaXB0V3JhcEltcG9ydHM6IHRydWUKS2Vl
cEVtcHR5TGluZXNBdFRoZVN0YXJ0T2ZCbG9ja3M6IHRydWUKTWFjcm9CbG9ja0JlZ2luOiAnJwpN
YWNyb0Jsb2NrRW5kOiAgICcnCk1heEVtcHR5TGluZXNUb0tlZXA6IDEKTmFtZXNwYWNlSW5kZW50
YXRpb246IElubmVyCk9iakNCbG9ja0luZGVudFdpZHRoOiA0Ck9iakNTcGFjZUFmdGVyUHJvcGVy
dHk6IHRydWUKT2JqQ1NwYWNlQmVmb3JlUHJvdG9jb2xMaXN0OiB0cnVlClBlbmFsdHlCcmVha0Jl
Zm9yZUZpcnN0Q2FsbFBhcmFtZXRlcjogMTkKUGVuYWx0eUJyZWFrQ29tbWVudDogMzAwClBlbmFs
dHlCcmVha0ZpcnN0TGVzc0xlc3M6IDEyMApQZW5hbHR5QnJlYWtTdHJpbmc6IDEwMDAKUGVuYWx0
eUV4Y2Vzc0NoYXJhY3RlcjogMTAwMDAwMApQZW5hbHR5UmV0dXJuVHlwZU9uSXRzT3duTGluZTog
NjAKUG9pbnRlckFsaWdubWVudDogTGVmdApSZWZsb3dDb21tZW50czogIHRydWUKU29ydEluY2x1
ZGVzOiAgICB0cnVlClNwYWNlQWZ0ZXJDU3R5bGVDYXN0OiBmYWxzZQpTcGFjZUFmdGVyVGVtcGxh
dGVLZXl3b3JkOiB0cnVlClNwYWNlQmVmb3JlQXNzaWdubWVudE9wZXJhdG9yczogdHJ1ZQpTcGFj
ZUJlZm9yZVBhcmVuczogQ29udHJvbFN0YXRlbWVudHMKU3BhY2VJbkVtcHR5UGFyZW50aGVzZXM6
IGZhbHNlClNwYWNlc0JlZm9yZVRyYWlsaW5nQ29tbWVudHM6IDEKU3BhY2VzSW5BbmdsZXM6ICBm
YWxzZQpTcGFjZXNJbkNvbnRhaW5lckxpdGVyYWxzOiB0cnVlClNwYWNlc0luQ1N0eWxlQ2FzdFBh
cmVudGhlc2VzOiBmYWxzZQpTcGFjZXNJblBhcmVudGhlc2VzOiBmYWxzZQpTcGFjZXNJblNxdWFy
ZUJyYWNrZXRzOiBmYWxzZQpTdGFuZGFyZDogICAgICAgIENwcDExClRhYldpZHRoOiAgICAgICAg
OApVc2VUYWI6ICAgICAgICAgIE5ldmVyCi4uLgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309081</attachid>
            <date>2017-05-04 12:14:00 -0700</date>
            <delta_ts>2017-05-04 12:14:00 -0700</delta_ts>
            <desc>Optional.h run through clang-format</desc>
            <filename>clang-formatted.diff</filename>
            <type>text/plain</type>
            <size>59786</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmggYi9Tb3VyY2UvV1RGL3d0Zi9P
cHRpb25hbC5oCmluZGV4IDJiM2M3YzEuLjIzMjk1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL09wdGlvbmFsLmgKKysrIGIvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaApAQCAtMzcsMTA0
ICszNywxMDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSMgaW5jbHVkZSA8dXRpbGl0eT4KLSMgaW5j
bHVkZSA8dHlwZV90cmFpdHM+Ci0jIGluY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jIGluY2x1
ZGUgPGNhc3NlcnQ+Ci0jIGluY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jIGluY2x1ZGUgPHN0cmluZz4K
LSMgaW5jbHVkZSA8c3RkZXhjZXB0PgotIyBpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotIyBp
bmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSMgaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci0jIGRlZmluZSBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoLi4uKSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxfX1ZBX0FSR1NfXzo6dmFsdWUsIGJvb2w+Ojp0eXBlID0gZmFsc2UKLQotIyBpZiBkZWZp
bmVkIF9fR05VQ19fIC8vIE5PVEU6IEdOVUMgaXMgYWxzbyBkZWZpbmVkIGZvciBDbGFuZwotIyAg
IGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gOCkKLSMgICAgIGRlZmlu
ZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVSX19fCi0jICAgZWxpZiAoX19HTlVDX18g
PiA0KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJfX18KLSMg
ICBlbmRpZgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNs
dWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDxz
dHJpbmc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2RlZmluZSBUUjJfT1BUSU9OQUxfUkVRVUlSRVMo
Li4uKSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX1ZBX0FSR1NfXzo6dmFsdWUsIGJvb2w+Ojp0
eXBlID0gZmFsc2UKKworI2lmIGRlZmluZWQgX19HTlVDX18gLy8gTk9URTogR05VQyBpcyBhbHNv
IGRlZmluZWQgZm9yIENsYW5nCisjaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1Jf
XyA+PSA4KQorI2RlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVSX19fCisjZWxp
ZiAoX19HTlVDX18gPiA0KQorI2RlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF9BTkRfSElHSEVS
X19fCisjZW5kaWYKICMKLSMgICBpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9f
ID49IDcpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXwot
IyAgIGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRf
N19BTkRfSElHSEVSX19fCi0jICAgZW5kaWYKKyNpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05V
Q19NSU5PUl9fID49IDcpCisjZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF83X0FORF9ISUdIRVJf
X18KKyNlbGlmIChfX0dOVUNfXyA+IDQpCisjZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF83X0FO
RF9ISUdIRVJfX18KKyNlbmRpZgogIwotIyAgIGlmIChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVD
X01JTk9SX18gPT0gOCkgJiYgKF9fR05VQ19QQVRDSExFVkVMX18gPj0gMSkKLSMgICAgIGRlZmlu
ZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNf
XyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gOSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9O
QUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAg
ICBkZWZpbmUgVFIyX09QVElPTkFMX0dDQ180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZW5kaWYK
LSMgZW5kaWYKKyNpZiAoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID09IDgpICYm
IChfX0dOVUNfUEFUQ0hMRVZFTF9fID49IDEpCisjZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84
XzFfQU5EX0hJR0hFUl9fXworI2VsaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1Jf
XyA+PSA5KQorI2RlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KKyNl
bGlmIChfX0dOVUNfXyA+IDQpCisjZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJ
R0hFUl9fXworI2VuZGlmCisjZW5kaWYKICMKLSMgaWYgZGVmaW5lZCBfX2NsYW5nX21ham9yX18K
LSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID09IDMgJiYgX19jbGFuZ19taW5vcl9fID49IDUpCi0j
ICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0NMQU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICBlbGlm
IChfX2NsYW5nX21ham9yX18gPiAzKQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18z
XzVfQU5EX0hJR0hURVJfCi0jICAgZW5kaWYKLSMgICBpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9D
TEFOR18zXzVfQU5EX0hJR0hURVJfCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0NMQU5HXzNf
NF8yX0FORF9ISUdIRVJfCi0jICAgZWxpZiAoX19jbGFuZ19tYWpvcl9fID09IDMgJiYgX19jbGFu
Z19taW5vcl9fID09IDQgJiYgX19jbGFuZ19wYXRjaGxldmVsX18gPj0gMikKLSMgICAgIGRlZmlu
ZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8KLSMgICBlbmRpZgotIyBlbmRp
ZgorI2lmIGRlZmluZWQgX19jbGFuZ19tYWpvcl9fCisjaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAz
ICYmIF9fY2xhbmdfbWlub3JfXyA+PSA1KQorI2RlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181
X0FORF9ISUdIVEVSXworI2VsaWYgKF9fY2xhbmdfbWFqb3JfXyA+IDMpCisjZGVmaW5lIFRSMl9P
UFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCisjZW5kaWYKKyNpZiBkZWZpbmVkIFRSMl9P
UFRJT05BTF9DTEFOR18zXzVfQU5EX0hJR0hURVJfCisjZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFO
R18zXzRfMl9BTkRfSElHSEVSXworI2VsaWYgKF9fY2xhbmdfbWFqb3JfXyA9PSAzICYmIF9fY2xh
bmdfbWlub3JfXyA9PSA0ICYmIF9fY2xhbmdfcGF0Y2hsZXZlbF9fID49IDIpCisjZGVmaW5lIFRS
Ml9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElHSEVSXworI2VuZGlmCisjZW5kaWYKICMKLSMg
aWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgIGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAgICAgZGVm
aW5lIFRSMl9PUFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jIGVu
ZGlmCi0KLSMgaWYgZGVmaW5lZCBfX2NsYW5nX18KLSMgICBpZiAoX19jbGFuZ19tYWpvcl9fID4g
MikgfHwgKF9fY2xhbmdfbWFqb3JfXyA9PSAyKSAmJiAoX19jbGFuZ19taW5vcl9fID49IDkpCi0j
ICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQotIyAgIGVsc2UKLSMg
ICAgIGRlZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jICAgZW5kaWYKLSMg
ZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGRl
ZmluZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAxCi0jIGVsaWYgZGVmaW5lZCBUUjJf
T1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFT
X1RISVNfUlZBTFVFX1JFRlMgMQotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElT
X1JWQUxVRV9SRUZTIDAKLSMgZW5kaWYKLQotCi0jIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dD
Q180XzhfMV9BTkRfSElHSEVSX19fCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19DT05TVEVYUFJf
SU5JVF9MSVNUIDEKLSMgICBkZWZpbmUgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBjb25z
dGV4cHIKLSMgZWxzZQotIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfQ09OU1RFWFBSX0lOSVRfTElT
VCAwCi0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QKLSMgZW5kaWYKKyNp
ZiBkZWZpbmVkIF9NU0NfVkVSCisjaWYgKF9NU0NfVkVSID49IDE5MDApCisjZGVmaW5lIFRSMl9P
UFRJT05BTF9NU1ZDXzIwMTVfQU5EX0hJR0hFUl9fXworI2VuZGlmCisjZW5kaWYKKworI2lmIGRl
ZmluZWQgX19jbGFuZ19fCisjaWYgKF9fY2xhbmdfbWFqb3JfXyA+IDIpIHx8IChfX2NsYW5nX21h
am9yX18gPT0gMikgJiYgKF9fY2xhbmdfbWlub3JfXyA+PSA5KQorI2RlZmluZSBPUFRJT05BTF9I
QVNfVEhJU19SVkFMVUVfUkVGUyAxCisjZWxzZQorI2RlZmluZSBPUFRJT05BTF9IQVNfVEhJU19S
VkFMVUVfUkVGUyAwCisjZW5kaWYKKyNlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0dDQ180Xzhf
MV9BTkRfSElHSEVSX19fCisjZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTIDEK
KyNlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fCisjZGVm
aW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTIDEKKyNlbHNlCisjZGVmaW5lIE9QVElP
TkFMX0hBU19USElTX1JWQUxVRV9SRUZTIDAKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBUUjJfT1BU
SU9OQUxfR0NDXzRfOF8xX0FORF9ISUdIRVJfX18KKyNkZWZpbmUgT1BUSU9OQUxfSEFTX0NPTlNU
RVhQUl9JTklUX0xJU1QgMQorI2RlZmluZSBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUIGNv
bnN0ZXhwcgorI2Vsc2UKKyNkZWZpbmUgT1BUSU9OQUxfSEFTX0NPTlNURVhQUl9JTklUX0xJU1Qg
MAorI2RlZmluZSBPUFRJT05BTF9DT05TVEVYUFJfSU5JVF9MSVNUCisjZW5kaWYKIAogLy8gRklY
TUU6IFRvIG1ha2UgdGhlIHJlc3VsdCBvZiB2YWx1ZSgpIHR5cGUgY29uc2lzdGVudCBhbW9uZyB0
aGUgY29tcGlsZXJzLCB3ZSBub3cgaW50ZW50aW9uYWxseSBkaXNhYmxlcyBtb3ZlIGFjY2Vzc29y
cy4KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX01PVkVfQUNDRVNTT1JTIDAKKyNkZWZpbmUgT1BU
SU9OQUxfSEFTX01PVkVfQUNDRVNTT1JTIDAKIC8vICMgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxf
Q0xBTkdfM181X0FORF9ISUdIVEVSXyAmJiAoZGVmaW5lZCBfX2NwbHVzcGx1cykgJiYgKF9fY3Bs
dXNwbHVzICE9IDIwMTEwM0wpCiAvLyAjICAgZGVmaW5lIE9QVElPTkFMX0hBU19NT1ZFX0FDQ0VT
U09SUyAxCiAvLyAjIGVsc2UKIC8vICMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX01PVkVfQUNDRVNT
T1JTIDAKIC8vICMgZW5kaWYKIAotIyAvLyBJbiBDKysxMSBjb25zdGV4cHIgaW1wbGllcyBjb25z
dCwgc28gd2UgbmVlZCB0byBtYWtlIG5vbi1jb25zdCBtZW1iZXJzIGFsc28gbm9uLWNvbnN0ZXhw
cgotIyBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cykgJiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wp
Ci0jICAgZGVmaW5lIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSCi0jIGVsc2UKLSMgICBkZWZp
bmUgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgY29uc3RleHByCi0jIGVuZGlmCisjLy8gSW4g
QysrMTEgY29uc3RleHByIGltcGxpZXMgY29uc3QsIHNvIHdlIG5lZWQgdG8gbWFrZSBub24tY29u
c3QgbWVtYmVycyBhbHNvIG5vbi1jb25zdGV4cHIKKyNpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cykg
JiYgKF9fY3BsdXNwbHVzID09IDIwMTEwM0wpCisjZGVmaW5lIE9QVElPTkFMX01VVEFCTEVfQ09O
U1RFWFBSCisjZWxzZQorI2RlZmluZSBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBjb25zdGV4
cHIKKyNlbmRpZgogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKICNkZWZpbmUg
X19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwogI2RlZmlu
ZSBfX05PRVhDRVBUIG5vZXhjZXB0CiAjZGVmaW5lIF9fTk9FWENFUFRfKF9fZXhjZXB0aW9uKSBu
b2V4Y2VwdChfX2V4Y2VwdGlvbikKICNlbHNlCi0jZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKF9f
ZXhjZXB0aW9uKSBkbyB7ICh2b2lkKV9fZXhjZXB0aW9uOyBDUkFTSCgpOyB9IHdoaWxlICgwKTsK
KyNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIFwKKyAgICBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHZvaWQpX19leGNlcHRpb247ICAg
ICAgICAgICAgIFwKKyAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlICgwKTsKICNkZWZpbmUgX19OT0VYQ0VQVAogI2RlZmluZSBfX05PRVhDRVBUXygu
Li4pCiAjZW5kaWYKQEAgLTE1OSw5MDcgKzE2MiwxMDI3IEBAIG5hbWVzcGFjZSBkZXRhaWxfIHsK
IC8vIC8vIEVORCB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIGlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGUKIAogI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0jIGlmIGRlZmluZWQoVFIy
X09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxf
Q0xBTkdfM180XzJfQU5EX0hJR0hFUl8pIHx8IGRlZmluZWQoVFIyX09QVElPTkFMX01TVkNfMjAx
NV9BTkRfSElHSEVSX19fKQorI2lmIGRlZmluZWQoVFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJ
R0hFUl9fXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8p
IHx8IGRlZmluZWQoVFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fKQogICAgIC8v
IGxlYXZlIGl0OyBvdXIgbWV0YWZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBkZWZpbmVkLgogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIHVzaW5nIGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KICAgICB1c2luZyBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSA9IHN0
ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VD47Ci0jIGVsaWYgZGVmaW5lZCBUUjJfT1BU
SU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLSAgICAvLyBsZWF2ZSBpdDog
dGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0jIGVsc2UKLQotCi0vLyB3b3JrYXJvdW5kIGZvciBt
aXNzaW5nIHRyYWl0cyBpbiBHQ0MgYW5kIENMQU5HCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVj
dCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZQotewotICBjb25zdGV4cHIgc3RhdGljIGJv
b2wgdmFsdWUgPSBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBUJiY+Ojp2YWx1ZTsK
LX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci1zdHJ1Y3QgaXNfYXNzaWduYWJs
ZQotewotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KLSAgY29uc3RleHByIHN0YXRpYyBi
b29sIGhhc19hc3NpZ24oLi4uKSB7IHJldHVybiBmYWxzZTsgfQotCi0gIHRlbXBsYXRlIDxjbGFz
cyBYLCBjbGFzcyBZLCBzaXplX3QgUyA9IHNpemVvZigoc3RkOjpkZWNsdmFsPFg+KCkgPSBzdGQ6
OmRlY2x2YWw8WT4oKSwgdHJ1ZSkpID4KLSAgLy8gdGhlIGNvbW1hIG9wZXJhdG9yIGlzIG5lY2Vz
c2FyeSBmb3IgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yPSByZXR1cm5zIHZvaWQKLSAgY29uc3Rl
eHByIHN0YXRpYyBib29sIGhhc19hc3NpZ24oYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNv
bnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19hc3NpZ248VCwgVT4odHJ1ZSk7Ci19Owot
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxl
Ci17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBib29sIGhhc19hbnlfbW92ZV9hc3NpZ24+Ci0gIHN0
cnVjdCBoYXNfbm90aHJvd19tb3ZlX2Fzc2lnbiB7Ci0gICAgY29uc3RleHByIHN0YXRpYyBib29s
IHZhbHVlID0gZmFsc2U7Ci0gIH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFg+Ci0gIHN0cnVjdCBo
YXNfbm90aHJvd19tb3ZlX2Fzc2lnbjxYLCB0cnVlPiB7Ci0gICAgY29uc3RleHByIHN0YXRpYyBi
b29sIHZhbHVlID0gX19OT0VYQ0VQVF8oIHN0ZDo6ZGVjbHZhbDxYJj4oKSA9IHN0ZDo6ZGVjbHZh
bDxYJiY+KCkgKTsKLSAgfTsKKyNlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0RJU0FCTEVfRU1V
TEFUSU9OX09GX1RZUEVfVFJBSVRTCisvLyBsZWF2ZSBpdDogdGhlIHVzZXIgZG9lc24ndCB3YW50
IGl0CisjZWxzZQogCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19ub3Rocm93
X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFibGU8VCYsIFQmJj46OnZhbHVlPjo6dmFsdWU7Ci19
OworICAgIC8vIHdvcmthcm91bmQgZm9yIG1pc3NpbmcgdHJhaXRzIGluIEdDQyBhbmQgQ0xBTkcK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGUgeworICAgICAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBzdGQ6Omlz
X25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBUJiY+Ojp2YWx1ZTsKKyAgICB9OworCisgICAgdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CisgICAgc3RydWN0IGlzX2Fzc2lnbmFibGUgeworICAg
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KKyAgICAgICAgY29uc3RleHByIHN0YXRp
YyBib29sIGhhc19hc3NpZ24oLi4uKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgICAgIHRlbXBs
YXRlIDxjbGFzcyBYLCBjbGFzcyBZLCBzaXplX3QgUyA9IHNpemVvZigoc3RkOjpkZWNsdmFsPFg+
KCkgPSBzdGQ6OmRlY2x2YWw8WT4oKSwgdHJ1ZSkpPgorICAgICAgICAvLyB0aGUgY29tbWEgb3Bl
cmF0b3IgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY2FzZXMgd2hlcmUgb3BlcmF0b3I9IHJldHVybnMg
dm9pZAorICAgICAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX2Fzc2lnbihib29sKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19hc3NpZ248VCwgVT4odHJ1ZSk7CisgICAg
fTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCBpc19ub3Rocm93X21vdmVf
YXNzaWduYWJsZSB7CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBYLCBib29sIGhhc19hbnlfbW92
ZV9hc3NpZ24+CisgICAgICAgIHN0cnVjdCBoYXNfbm90aHJvd19tb3ZlX2Fzc2lnbiB7CisgICAg
ICAgICAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBmYWxzZTsKKyAgICAgICAgfTsK
KworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgWD4KKyAgICAgICAgc3RydWN0IGhhc19ub3Rocm93
X21vdmVfYXNzaWduPFgsIHRydWU+IHsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCB2YWx1ZSA9IF9fTk9FWENFUFRfKHN0ZDo6ZGVjbHZhbDxYJj4oKSA9IHN0ZDo6ZGVjbHZhbDxY
JiY+KCkpOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1
ZSA9IGhhc19ub3Rocm93X21vdmVfYXNzaWduPFQsIGlzX2Fzc2lnbmFibGU8VCYsIFQmJj46OnZh
bHVlPjo6dmFsdWU7CisgICAgfTsKIC8vIGVuZCB3b3JrYXJvdW5kCiAKLQotIyBlbmRpZgorI2Vu
ZGlmCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgZGV0YWlsXwogCiAvLyAyMC41LjQsIG9wdGlv
bmFsIGZvciBvYmplY3QgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBvcHRpb25hbDsK
K3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3Mgb3B0aW9uYWw7CiAKIC8vIDIwLjUuNSwgb3B0aW9u
YWwgZm9yIGx2YWx1ZSByZWZlcmVuY2UgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBv
cHRpb25hbDxUJj47Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIG9wdGlvbmFsPFQmPjsKIAog
bmFtZXNwYWNlIGRldGFpbF8gewogCi0vLyB3b3JrYXJvdW5kOiBzdGQgdXRpbGl0eSBmdW5jdGlv
bnMgYXJlbid0IGNvbnN0ZXhwciB5ZXQKLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgY29uc3Rl
eHByIFQmJiBjb25zdGV4cHJfZm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8
VD46OnR5cGUmIHQpIF9fTk9FWENFUFQKLXsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4odCk7
Ci19CisgICAgLy8gd29ya2Fyb3VuZDogc3RkIHV0aWxpdHkgZnVuY3Rpb25zIGFyZW4ndCBjb25z
dGV4cHIgeWV0CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgaW5saW5lIGNvbnN0ZXhwciBU
JiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0
eXBlJiB0KSBfX05PRVhDRVBUCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYm
Pih0KTsKKyAgICB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgY29uc3RleHByIFQmJiBj
b25zdGV4cHJfZm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUm
JiB0KSBfX05PRVhDRVBUCi17Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19sdmFsdWVfcmVm
ZXJlbmNlPFQ+Ojp2YWx1ZSwgIiEhIik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQmJj4odCk7
Ci19CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUJiYgY29u
c3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiYg
dCkgX19OT0VYQ0VQVAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19sdmFs
dWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSwgIiEhIik7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUJiY+KHQpOworICAgIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBjb25zdGV4cHIg
dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiYgY29uc3RleHByX21vdmUo
VCYmIHQpIF9fTk9FWENFUFQKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiY+KHQpOwotfQorICAgIHRlbXBsYXRlIDxjbGFz
cyBUPgorICAgIGlubGluZSBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFQ+Ojp0eXBlJiYgY29uc3RleHByX21vdmUoVCYmIHQpIF9fTk9FWENFUFQKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46
OnR5cGUmJj4odCk7CisgICAgfQogCiAjaWYgZGVmaW5lZCBOREVCVUcKLSMgZGVmaW5lIFRSMl9P
UFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9OKENIRUNLLCBFWFBSKSAoRVhQUikKKyNkZWZpbmUg
VFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJT04oQ0hFQ0ssIEVYUFIpIChFWFBSKQogI2Vs
c2UKLSMgZGVmaW5lIFRSMl9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9OKENIRUNLLCBFWFBS
KSAoKENIRUNLKSA/IChFWFBSKSA6IChbXXthc3NlcnQoISNDSEVDSyk7fSgpLCAoRVhQUikpKQor
I2RlZmluZSBUUjJfT1BUSU9OQUxfQVNTRVJURURfRVhQUkVTU0lPTihDSEVDSywgRVhQUikgKChD
SEVDSykgPyAoRVhQUikgOiAoW10geyBhc3NlcnQoISNDSEVDSyk7IH0oKSwgKEVYUFIpKSkKICNl
bmRpZgogCisgICAgLy8gc3RhdGljX2FkZHJlc3NvZjogYSBjb25zdGV4cHIgdmVyc2lvbiBvZiBh
ZGRyZXNzb2YKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaGFzX292ZXJs
b2FkZWRfYWRkcmVzc29mIHsKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFg+CisgICAgICAgIGNv
bnN0ZXhwciBzdGF0aWMgYm9vbCBoYXNfb3ZlcmxvYWQoLi4uKSB7IHJldHVybiBmYWxzZTsgfQog
Ci0vLyBzdGF0aWNfYWRkcmVzc29mOiBhIGNvbnN0ZXhwciB2ZXJzaW9uIG9mIGFkZHJlc3NvZgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mCi17
Ci0gIHRlbXBsYXRlIDxjbGFzcyBYPgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJs
b2FkKC4uLikgeyByZXR1cm4gZmFsc2U7IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgc2l6ZV90
IFMgPSBzaXplb2Yoc3RkOjpkZWNsdmFsPFgmPigpLm9wZXJhdG9yJigpKSA+Ci0gIGNvbnN0ZXhw
ciBzdGF0aWMgYm9vbCBoYXNfb3ZlcmxvYWQoYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIGNv
bnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19vdmVybG9hZDxUPih0cnVlKTsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUUjJfT1BUSU9OQUxfUkVRVUlSRVMoIWhhc19vdmVybG9h
ZGVkX2FkZHJlc3NvZjxUPik+Ci1jb25zdGV4cHIgVCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYp
Ci17Ci0gIHJldHVybiAmcmVmOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElP
TkFMX1JFUVVJUkVTKGhhc19vdmVybG9hZGVkX2FkZHJlc3NvZjxUPik+Ci1UKiBzdGF0aWNfYWRk
cmVzc29mKFQmIHJlZikKLXsKLSAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKHJlZik7Ci19CisgICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBYLCBzaXplX3QgUyA9IHNpemVvZihzdGQ6OmRlY2x2YWw8WCY+
KCkub3BlcmF0b3ImKCkpPgorICAgICAgICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJs
b2FkKGJvb2wpIHsgcmV0dXJuIHRydWU7IH0KIAorICAgICAgICBjb25zdGV4cHIgc3RhdGljIGJv
b2wgdmFsdWUgPSBoYXNfb3ZlcmxvYWQ8VD4odHJ1ZSk7CisgICAgfTsKIAotLy8gdGhlIGNhbGwg
dG8gY29udmVydDxBPihiKSBoYXMgcmV0dXJuIHR5cGUgQSBhbmQgY29udmVydHMgYiB0byB0eXBl
IEEgaWZmIGIgZGVjbHR5cGUoYikgaXMgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBBCi10ZW1w
bGF0ZSA8Y2xhc3MgVT4KLWNvbnN0ZXhwciBVIGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyghaGFzX292ZXJs
b2FkZWRfYWRkcmVzc29mPFQ+KT4KKyAgICBjb25zdGV4cHIgVCogc3RhdGljX2FkZHJlc3NvZihU
JiByZWYpCisgICAgeworICAgICAgICByZXR1cm4gJnJlZjsKKyAgICB9CiAKLX0gLy8gbmFtZXNw
YWNlIGRldGFpbAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBUUjJfT1BUSU9OQUxfUkVRVUlS
RVMoaGFzX292ZXJsb2FkZWRfYWRkcmVzc29mPFQ+KT4KKyAgICBUKiBzdGF0aWNfYWRkcmVzc29m
KFQmIHJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmFkZHJlc3NvZihyZWYpOworICAg
IH0KIAorICAgIC8vIHRoZSBjYWxsIHRvIGNvbnZlcnQ8QT4oYikgaGFzIHJldHVybiB0eXBlIEEg
YW5kIGNvbnZlcnRzIGIgdG8gdHlwZSBBIGlmZiBiIGRlY2x0eXBlKGIpIGlzIGltcGxpY2l0bHkg
Y29udmVydGlibGUgdG8gQQorICAgIHRlbXBsYXRlIDxjbGFzcyBVPgorICAgIGNvbnN0ZXhwciBV
IGNvbnZlcnQoVSB2KSB7IHJldHVybiB2OyB9CiAKLWNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9p
bml0X3R7fSB0cml2aWFsX2luaXR7fTsKK30gLy8gbmFtZXNwYWNlIGRldGFpbF8KIAorY29uc3Rl
eHByIHN0cnVjdCB0cml2aWFsX2luaXRfdCB7Cit9IHRyaXZpYWxfaW5pdHt9OwogCiAvLyAyMC41
LjYsIEluLXBsYWNlIGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30g
aW5fcGxhY2V7fTsKLQorY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90IHsKK30gaW5fcGxhY2V7
fTsKIAogLy8gMjAuNS43LCBEaXNlbmdhZ2VkIHN0YXRlIGluZGljYXRvcgotc3RydWN0IG51bGxv
cHRfdAotewotICBzdHJ1Y3QgaW5pdHt9OwotICBjb25zdGV4cHIgZXhwbGljaXQgbnVsbG9wdF90
KGluaXQpe30KK3N0cnVjdCBudWxsb3B0X3QgeworICAgIHN0cnVjdCBpbml0IHsKKyAgICB9Owor
ICAgIGNvbnN0ZXhwciBleHBsaWNpdCBudWxsb3B0X3QoaW5pdCkge30KIH07Ci1jb25zdGV4cHIg
bnVsbG9wdF90IG51bGxvcHR7bnVsbG9wdF90Ojppbml0KCl9OwotCitjb25zdGV4cHIgbnVsbG9w
dF90IG51bGxvcHR7IG51bGxvcHRfdDo6aW5pdCgpIH07CiAKIC8vIDIwLjUuOCwgY2xhc3MgYmFk
X29wdGlvbmFsX2FjY2VzcwogY2xhc3MgYmFkX29wdGlvbmFsX2FjY2VzcyA6IHB1YmxpYyBzdGQ6
OmxvZ2ljX2Vycm9yIHsKIHB1YmxpYzoKLSAgZXhwbGljaXQgYmFkX29wdGlvbmFsX2FjY2Vzcyhj
b25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpIDogc3RkOjpsb2dpY19lcnJvcnt3aGF0X2FyZ30g
e30KLSAgZXhwbGljaXQgYmFkX29wdGlvbmFsX2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZykg
OiBzdGQ6OmxvZ2ljX2Vycm9ye3doYXRfYXJnfSB7fQorICAgIGV4cGxpY2l0IGJhZF9vcHRpb25h
bF9hY2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXRfYXJnKQorICAgICAgICA6IHN0ZDo6bG9n
aWNfZXJyb3J7IHdoYXRfYXJnIH0KKyAgICB7CisgICAgfQorICAgIGV4cGxpY2l0IGJhZF9vcHRp
b25hbF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpCisgICAgICAgIDogc3RkOjpsb2dpY19l
cnJvcnsgd2hhdF9hcmcgfQorICAgIHsKKyAgICB9CiB9OwogCi0KIHRlbXBsYXRlIDxjbGFzcyBU
PgotdW5pb24gc3RvcmFnZV90Ci17Ci0gIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwotICBUIHZhbHVl
XzsKK3VuaW9uIHN0b3JhZ2VfdCB7CisgICAgdW5zaWduZWQgY2hhciBkdW1teV87CisgICAgVCB2
YWx1ZV87CiAKLSAgY29uc3RleHByIHN0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhD
RVBUIDogZHVtbXlfKCkge307CisgICAgY29uc3RleHByIHN0b3JhZ2VfdCh0cml2aWFsX2luaXRf
dCkgX19OT0VYQ0VQVCA6IGR1bW15Xygpe307CiAKLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+
Ci0gIGNvbnN0ZXhwciBzdG9yYWdlX3QoIEFyZ3MmJi4uLiBhcmdzICkgOiB2YWx1ZV8oZGV0YWls
Xzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisgICAgdGVtcGxhdGUgPGNs
YXNzLi4uIEFyZ3M+CisgICAgY29uc3RleHByIHN0b3JhZ2VfdChBcmdzJiYuLi4gYXJncykKKyAg
ICAgICAgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4p
CisgICAgeworICAgIH0KIAotICB+c3RvcmFnZV90KCl7fQorICAgIH5zdG9yYWdlX3QoKSB7fQog
fTsKIAotCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLXVuaW9uIGNvbnN0ZXhwcl9zdG9yYWdlX3QKLXsK
K3VuaW9uIGNvbnN0ZXhwcl9zdG9yYWdlX3QgewogICAgIHVuc2lnbmVkIGNoYXIgZHVtbXlfOwog
ICAgIFQgdmFsdWVfOwogCi0gICAgY29uc3RleHByIGNvbnN0ZXhwcl9zdG9yYWdlX3QoIHRyaXZp
YWxfaW5pdF90ICkgX19OT0VYQ0VQVCA6IGR1bW15XygpIHt9OworICAgIGNvbnN0ZXhwciBjb25z
dGV4cHJfc3RvcmFnZV90KHRyaXZpYWxfaW5pdF90KSBfX05PRVhDRVBUIDogZHVtbXlfKCl7fTsK
IAogICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICAgIGNvbnN0ZXhwciBjb25zdGV4cHJf
c3RvcmFnZV90KCBBcmdzJiYuLi4gYXJncyApIDogdmFsdWVfKGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorICAgIGNvbnN0ZXhwciBjb25zdGV4cHJfc3RvcmFn
ZV90KEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICA6IHZhbHVlXyhkZXRhaWxfOjpjb25zdGV4cHJf
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKyAgICB7CisgICAgfQogCiAgICAgfmNvbnN0ZXhwcl9z
dG9yYWdlX3QoKSA9IGRlZmF1bHQ7CiB9OwogCi0KIHRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0
IG9wdGlvbmFsX2Jhc2UKLXsKK3N0cnVjdCBvcHRpb25hbF9iYXNlIHsKICAgICBib29sIGluaXRf
OwogICAgIHN0b3JhZ2VfdDxUPiBzdG9yYWdlXzsKIAotICAgIGNvbnN0ZXhwciBvcHRpb25hbF9i
YXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNlKSwgc3RvcmFnZV8odHJpdmlhbF9pbml0KSB7
fTsKKyAgICBjb25zdGV4cHIgb3B0aW9uYWxfYmFzZSgpIF9fTk9FWENFUFQgOiBpbml0XyhmYWxz
ZSksIHN0b3JhZ2VfKHRyaXZpYWxfaW5pdCl7fTsKIAotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBv
cHRpb25hbF9iYXNlKGNvbnN0IFQmIHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKHYpIHt9Cisg
ICAgZXhwbGljaXQgY29uc3RleHByIG9wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikKKyAgICAgICAg
OiBpbml0Xyh0cnVlKQorICAgICAgICAsIHN0b3JhZ2VfKHYpCisgICAgeworICAgIH0KIAotICAg
IGV4cGxpY2l0IGNvbnN0ZXhwciBvcHRpb25hbF9iYXNlKFQmJiB2KSA6IGluaXRfKHRydWUpLCBz
dG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJfbW92ZSh2KSkge30KKyAgICBleHBsaWNpdCBjb25z
dGV4cHIgb3B0aW9uYWxfYmFzZShUJiYgdikKKyAgICAgICAgOiBpbml0Xyh0cnVlKQorICAgICAg
ICAsIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKQorICAgIHsKKyAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4gZXhwbGljaXQgb3B0aW9uYWxfYmFzZShpbl9w
bGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAgICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8o
ZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisgICAgdGVtcGxh
dGUgPGNsYXNzLi4uIEFyZ3M+CisgICAgZXhwbGljaXQgb3B0aW9uYWxfYmFzZShpbl9wbGFjZV90
LCBBcmdzJiYuLi4gYXJncykKKyAgICAgICAgOiBpbml0Xyh0cnVlKQorICAgICAgICAsIHN0b3Jh
Z2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKQorICAgIHsKKyAg
ICB9CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFM
X1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
VT4+KT4KICAgICBleHBsaWNpdCBvcHRpb25hbF9iYXNlKGluX3BsYWNlX3QsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCi0gICAgICAgIDogaW5pdF8odHJ1ZSks
IHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisgICAgICAgIDog
aW5pdF8odHJ1ZSkKKyAgICAgICAgLCBzdG9yYWdlXyhpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKQorICAgIHsKKyAgICB9CiAKLSAgICB+b3B0aW9uYWxfYmFzZSgpIHsgaWYgKGluaXRf
KSBzdG9yYWdlXy52YWx1ZV8uVDo6flQoKTsgfQorICAgIH5vcHRpb25hbF9iYXNlKCkKKyAgICB7
CisgICAgICAgIGlmIChpbml0XykKKyAgICAgICAgICAgIHN0b3JhZ2VfLnZhbHVlXy5UOjp+VCgp
OworICAgIH0KIH07CiAKLQogdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgY29uc3RleHByX29w
dGlvbmFsX2Jhc2UKLXsKK3N0cnVjdCBjb25zdGV4cHJfb3B0aW9uYWxfYmFzZSB7CiAgICAgYm9v
bCBpbml0XzsKICAgICBjb25zdGV4cHJfc3RvcmFnZV90PFQ+IHN0b3JhZ2VfOwogCi0gICAgY29u
c3RleHByIGNvbnN0ZXhwcl9vcHRpb25hbF9iYXNlKCkgX19OT0VYQ0VQVCA6IGluaXRfKGZhbHNl
KSwgc3RvcmFnZV8odHJpdmlhbF9pbml0KSB7fTsKKyAgICBjb25zdGV4cHIgY29uc3RleHByX29w
dGlvbmFsX2Jhc2UoKSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFs
X2luaXQpe307CiAKLSAgICBleHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jh
c2UoY29uc3QgVCYgdikgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8odikge30KKyAgICBleHBsaWNp
dCBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2UoY29uc3QgVCYgdikKKyAgICAgICAg
OiBpbml0Xyh0cnVlKQorICAgICAgICAsIHN0b3JhZ2VfKHYpCisgICAgeworICAgIH0KIAotICAg
IGV4cGxpY2l0IGNvbnN0ZXhwciBjb25zdGV4cHJfb3B0aW9uYWxfYmFzZShUJiYgdikgOiBpbml0
Xyh0cnVlKSwgc3RvcmFnZV8oZGV0YWlsXzo6Y29uc3RleHByX21vdmUodikpIHt9CisgICAgZXhw
bGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9vcHRpb25hbF9iYXNlKFQmJiB2KQorICAgICAgICA6
IGluaXRfKHRydWUpCisgICAgICAgICwgc3RvcmFnZV8oZGV0YWlsXzo6Y29uc3RleHByX21vdmUo
dikpCisgICAgeworICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPiBleHBsaWNp
dCBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2UoaW5fcGxhY2VfdCwgQXJncyYmLi4u
IGFyZ3MpCi0gICAgICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhkZXRhaWxfOjpjb25zdGV4cHJf
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4K
KyAgICBleHBsaWNpdCBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2UoaW5fcGxhY2Vf
dCwgQXJncyYmLi4uIGFyZ3MpCisgICAgICAgIDogaW5pdF8odHJ1ZSkKKyAgICAgICAgLCBzdG9y
YWdlXyhkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKyAgICB7Cisg
ICAgfQogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJT05B
TF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9saXN0
PFU+Pik+CiAgICAgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBleHBsaWNpdCBjb25zdGV4
cHJfb3B0aW9uYWxfYmFzZShpbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWws
IEFyZ3MmJi4uLiBhcmdzKQotICAgICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKyAgICAgICAgOiBpbml0Xyh0cnVlKQorICAgICAg
ICAsIHN0b3JhZ2VfKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pCisgICAgeworICAg
IH0KIAogICAgIH5jb25zdGV4cHJfb3B0aW9uYWxfYmFzZSgpID0gZGVmYXVsdDsKIH07CiAKIHRl
bXBsYXRlIDxjbGFzcyBUPgogdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5hbWUgc3RkOjpjb25k
aXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKKyAgICBzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAvLyBpZiBwb3NzaWJsZQogICAgIGNvbnN0ZXhw
cl9vcHRpb25hbF9iYXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPiwgLy8g
dXNlIGJhc2Ugd2l0aCB0cml2aWFsIGRlc3RydWN0b3IKLSAgICBvcHRpb25hbF9iYXNlPHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPgotPjo6dHlwZTsKKyAgICBvcHRpb25hbF9i
YXNlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPj46OnR5cGU7CiAKK3RlbXBs
YXRlIDxjbGFzcyBUPgorY2xhc3Mgb3B0aW9uYWwgOiBwcml2YXRlIE9wdGlvbmFsQmFzZTxUPiB7
CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46
OnR5cGUsIG51bGxvcHRfdD46OnZhbHVlLCAiYmFkIFQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgaW5fcGxhY2VfdD46OnZh
bHVlLCAiYmFkIFQiKTsKKworICAgIGNvbnN0ZXhwciBib29sIGluaXRpYWxpemVkKCkgY29uc3Qg
X19OT0VYQ0VQVCB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OmluaXRfOyB9CisgICAgdHlwZW5h
bWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUqIGRhdGFwdHIoKSB7IHJldHVybiBzdGQ6OmFk
ZHJlc3NvZihPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXyk7IH0KKyAgICBjb25zdGV4
cHIgY29uc3QgVCogZGF0YXB0cigpIGNvbnN0IHsgcmV0dXJuIGRldGFpbF86OnN0YXRpY19hZGRy
ZXNzb2YoT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9CisKKyNpZiBPUFRJT05B
TF9IQVNfVEhJU19SVkFMVUVfUkVGUyA9PSAxCisgICAgY29uc3RleHByIGNvbnN0IFQmIGNvbnRh
aW5lZF92YWwoKSBjb25zdCAmCisgICAgeworICAgICAgICByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+
OjpzdG9yYWdlXy52YWx1ZV87CisgICAgfQorI2lmIE9QVElPTkFMX0hBU19NT1ZFX0FDQ0VTU09S
UyA9PSAxCisgICAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYmIGNvbnRhaW5lZF92YWwo
KSAmJgorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShPcHRpb25hbEJhc2U8VD46OnN0
b3JhZ2VfLnZhbHVlXyk7CisgICAgfQorICAgIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQm
IGNvbnRhaW5lZF92YWwoKSAmIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFs
dWVfOyB9CisjZWxzZQorICAgIFQmIGNvbnRhaW5lZF92YWwoKSAmCisgICAgeworICAgICAgICBy
ZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87CisgICAgfQorICAgIFQmJiBj
b250YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9wdGlvbmFsQmFzZTxUPjo6c3Rv
cmFnZV8udmFsdWVfKTsgfQorI2VuZGlmCisjZWxzZQorICAgIGNvbnN0ZXhwciBjb25zdCBUJiBj
b250YWluZWRfdmFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBPcHRpb25hbEJhc2U8
VD46OnN0b3JhZ2VfLnZhbHVlXzsKKyAgICB9CisgICAgVCYgY29udGFpbmVkX3ZhbCgpIHsgcmV0
dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9CisjZW5kaWYKIAorICAgIHZv
aWQgY2xlYXIoKSBfX05PRVhDRVBUCisgICAgeworICAgICAgICBpZiAoaW5pdGlhbGl6ZWQoKSkK
KyAgICAgICAgICAgIGRhdGFwdHIoKS0+VDo6flQoKTsKKyAgICAgICAgT3B0aW9uYWxCYXNlPFQ+
Ojppbml0XyA9IGZhbHNlOworICAgIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBvcHRp
b25hbCA6IHByaXZhdGUgT3B0aW9uYWxCYXNlPFQ+Ci17Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6
OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZSwgbnVsbG9wdF90Pjo6dmFsdWUs
ICJiYWQgVCIgKTsKLSAgc3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6
OmRlY2F5PFQ+Ojp0eXBlLCBpbl9wbGFjZV90Pjo6dmFsdWUsICJiYWQgVCIgKTsKLQotCi0gIGNv
bnN0ZXhwciBib29sIGluaXRpYWxpemVkKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBPcHRp
b25hbEJhc2U8VD46OmluaXRfOyB9Ci0gIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0
eXBlKiBkYXRhcHRyKCkgeyAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKE9wdGlvbmFsQmFzZTxUPjo6
c3RvcmFnZV8udmFsdWVfKTsgfQotICBjb25zdGV4cHIgY29uc3QgVCogZGF0YXB0cigpIGNvbnN0
IHsgcmV0dXJuIGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YoT3B0aW9uYWxCYXNlPFQ+OjpzdG9y
YWdlXy52YWx1ZV8pOyB9Ci0KLSMgaWYgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgPT0g
MQotICBjb25zdGV4cHIgY29uc3QgVCYgY29udGFpbmVkX3ZhbCgpIGNvbnN0JiB7IHJldHVybiBP
cHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotIyAgIGlmIE9QVElPTkFMX0hBU19N
T1ZFX0FDQ0VTU09SUyA9PSAxCi0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQmJiBjb250
YWluZWRfdmFsKCkgJiYgeyByZXR1cm4gc3RkOjptb3ZlKE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFn
ZV8udmFsdWVfKTsgfQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiBjb250YWluZWRf
dmFsKCkgJiB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotIyAg
IGVsc2UKLSAgVCYgY29udGFpbmVkX3ZhbCgpICYgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+Ojpz
dG9yYWdlXy52YWx1ZV87IH0KLSAgVCYmIGNvbnRhaW5lZF92YWwoKSAmJiB7IHJldHVybiBzdGQ6
Om1vdmUoT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0jICAgZW5kaWYKLSMg
ZWxzZQotICBjb25zdGV4cHIgY29uc3QgVCYgY29udGFpbmVkX3ZhbCgpIGNvbnN0IHsgcmV0dXJu
IE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0gIFQmIGNvbnRhaW5lZF92YWwo
KSB7IHJldHVybiBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotIyBlbmRpZgot
Ci0gIHZvaWQgY2xlYXIoKSBfX05PRVhDRVBUIHsKLSAgICBpZiAoaW5pdGlhbGl6ZWQoKSkgZGF0
YXB0cigpLT5UOjp+VCgpOwotICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSBmYWxzZTsKLSAg
fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICB2b2lkIGluaXRpYWxpemUoQXJncyYm
Li4uIGFyZ3MpIF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKSkpCi0gIHsKLSAgICBBU1NFUlQoIU9wdGlvbmFsQmFzZTxUPjo6aW5pdF8pOwotICAg
IDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oZGF0YXB0cigpKSkgVChzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pOwotICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICB9Ci0K
LSAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgaW5pdGlhbGl6ZShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKSBfX05PRVhDRVBUXyhf
X05PRVhDRVBUXyhUKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAg
IEFTU0VSVCghT3B0aW9uYWxCYXNlPFQ+Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0
PHZvaWQqPihkYXRhcHRyKCkpKSBUKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwot
ICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICB9CisgICAgdGVtcGxhdGUgPGNs
YXNzLi4uIEFyZ3M+CisgICAgdm9pZCBpbml0aWFsaXplKEFyZ3MmJi4uLiBhcmdzKSBfX05PRVhD
RVBUXyhfX05PRVhDRVBUXyhUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKKyAgICAgICAgOjpuZXcg
KHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7CisgICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgaW5pdGlhbGl6
ZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKSBfX05PRVhDRVBU
XyhfX05PRVhDRVBUXyhUKGlsLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghT3B0aW9uYWxCYXNlPFQ+Ojppbml0Xyk7CisgICAgICAgIDo6bmV3
IChzdGF0aWNfY2FzdDx2b2lkKj4oZGF0YXB0cigpKSkgVChpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKyAgICAgICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7CisgICAg
fQogCiBwdWJsaWM6Ci0gIHR5cGVkZWYgVCB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgVCB2YWx1
ZV90eXBlOworCisgICAgLy8gMjAuNS41LjEsIGNvbnN0cnVjdG9ycworICAgIGNvbnN0ZXhwciBv
cHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKXt9OworICAgIGNvbnN0ZXhw
ciBvcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKXt9Owor
CisgICAgb3B0aW9uYWwoY29uc3Qgb3B0aW9uYWwmIHJocykKKyAgICAgICAgOiBPcHRpb25hbEJh
c2U8VD4oKQorICAgIHsKKyAgICAgICAgaWYgKHJocy5pbml0aWFsaXplZCgpKSB7CisgICAgICAg
ICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoKnJocyk7CisgICAg
ICAgICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG9wdGlvbmFsKG9wdGlvbmFsJiYgcmhzKSBfX05PRVhDRVBUXyhkZXRhaWxfOjppc19u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUpCisgICAgICAgIDogT3B0aW9uYWxC
YXNlPFQ+KCkKKyAgICB7CisgICAgICAgIGlmIChyaHMuaW5pdGlhbGl6ZWQoKSkgeworICAgICAg
ICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgq
cmhzKSk7CisgICAgICAgICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KIAotICAvLyAyMC41LjUuMSwgY29uc3RydWN0b3JzCi0gIGNvbnN0ZXhwciBv
cHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKSAge307Ci0gIGNvbnN0ZXhw
ciBvcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiBPcHRpb25hbEJhc2U8VD4oKSB7fTsK
KyAgICBjb25zdGV4cHIgb3B0aW9uYWwoY29uc3QgVCYgdikKKyAgICAgICAgOiBPcHRpb25hbEJh
c2U8VD4odikKKyAgICB7CisgICAgfQogCi0gIG9wdGlvbmFsKGNvbnN0IG9wdGlvbmFsJiByaHMp
Ci0gIDogT3B0aW9uYWxCYXNlPFQ+KCkKLSAgewotICAgIGlmIChyaHMuaW5pdGlhbGl6ZWQoKSkg
ewotICAgICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoKnJocyk7
Ci0gICAgICAgIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOworICAgIGNvbnN0ZXhwciBv
cHRpb25hbChUJiYgdikKKyAgICAgICAgOiBPcHRpb25hbEJhc2U8VD4oZGV0YWlsXzo6Y29uc3Rl
eHByX21vdmUodikpCisgICAgewogICAgIH0KLSAgfQogCi0gIG9wdGlvbmFsKG9wdGlvbmFsJiYg
cmhzKSBfX05PRVhDRVBUXyhkZXRhaWxfOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxU
Pjo6dmFsdWUpCi0gIDogT3B0aW9uYWxCYXNlPFQ+KCkKLSAgewotICAgIGlmIChyaHMuaW5pdGlh
bGl6ZWQoKSkgewotICAgICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkp
IFQoc3RkOjptb3ZlKCpyaHMpKTsKLSAgICAgICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRy
dWU7CisgICAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgICAgZXhwbGljaXQgY29uc3RleHBy
IG9wdGlvbmFsKGluX3BsYWNlX3QsIEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICA6IE9wdGlvbmFs
QmFzZTxUPihpbl9wbGFjZV90e30sIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKQorICAgIHsKICAgICB9Ci0gIH0KLQotICBjb25zdGV4cHIgb3B0aW9uYWwoY29uc3Qg
VCYgdikgOiBPcHRpb25hbEJhc2U8VD4odikge30KLQotICBjb25zdGV4cHIgb3B0aW9uYWwoVCYm
IHYpIDogT3B0aW9uYWxCYXNlPFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0g
IHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBleHBsaWNpdCBjb25zdGV4cHIgb3B0aW9uYWwo
aW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0gIDogT3B0aW9uYWxCYXNlPFQ+KGluX3BsYWNl
X3R7fSwgZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLSAg
dGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyhz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+Pik+Ci0gIE9Q
VElPTkFMX0NPTlNURVhQUl9JTklUX0xJU1QgZXhwbGljaXQgb3B0aW9uYWwoaW5fcGxhY2VfdCwg
c3RkOjppbml0aWFsaXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykKLSAgOiBPcHRpb25h
bEJhc2U8VD4oaW5fcGxhY2VfdHt9LCBpbCwgZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8QXJn
cz4oYXJncykuLi4pIHt9Ci0KLSAgLy8gMjAuNS40LjIsIERlc3RydWN0b3IKLSAgfm9wdGlvbmFs
KCkgPSBkZWZhdWx0OwotCi0gIC8vIDIwLjUuNC4zLCBhc3NpZ25tZW50Ci0gIG9wdGlvbmFsJiBv
cGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBUCi0gIHsKLSAgICBjbGVhcigpOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotCi0gIG9wdGlvbmFsJiBvcGVyYXRvcj0oY29uc3Qgb3B0aW9uYWwm
IHJocykKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmlu
aXRpYWxpemVkKCkgPT0gZmFsc2UpIGNsZWFyKCk7Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQo
KSA9PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgaW5pdGlhbGl6ZSgqcmhz
KTsKLSAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXpl
ZCgpID09IHRydWUpICBjb250YWluZWRfdmFsKCkgPSAqcmhzOwotICAgIHJldHVybiAqdGhpczsK
LSAgfQotCi0gIG9wdGlvbmFsJiBvcGVyYXRvcj0ob3B0aW9uYWwmJiByaHMpCi0gIF9fTk9FWENF
UFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPFQ+Ojp2YWx1ZSAmJiBkZXRh
aWxfOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUpCi0gIHsKLSAgICBp
ZiAgICAgIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IGZh
bHNlKSBjbGVhcigpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gZmFsc2UgJiYgcmhz
LmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMpKTsKLSAg
ICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09
IHRydWUpICBjb250YWluZWRfdmFsKCkgPSBzdGQ6Om1vdmUoKnJocyk7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFU+Ci0gIGF1dG8gb3BlcmF0b3I9KFUmJiB2
KQotICAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZgotICA8Ci0gICAgc3RkOjppc19zYW1lPHR5
cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIFQ+Ojp2YWx1ZSwKLSAgICBvcHRpb25hbCYKLSAg
Pjo6dHlwZQotICB7Ci0gICAgaWYgKGluaXRpYWxpemVkKCkpIHsgY29udGFpbmVkX3ZhbCgpID0g
c3RkOjpmb3J3YXJkPFU+KHYpOyB9Ci0gICAgZWxzZSAgICAgICAgICAgICAgIHsgaW5pdGlhbGl6
ZShzdGQ6OmZvcndhcmQ8VT4odikpOyAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0KLSAg
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgZW1wbGFjZShBcmdzJiYuLi4gYXJncykK
LSAgewotICAgIGNsZWFyKCk7Ci0gICAgaW5pdGlhbGl6ZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+Ci0gIHZv
aWQgZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQot
ICB7Ci0gICAgY2xlYXIoKTsKLSAgICBpbml0aWFsaXplPFUsIEFyZ3MuLi4+KGlsLCBzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOwotICB9Ci0KLSAgLy8gMjAuNS40LjQsIFN3YXAKLSAgdm9p
ZCBzd2FwKG9wdGlvbmFsPFQ+JiByaHMpIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSAmJiBfX05PRVhDRVBUXyhzd2FwKHN0ZDo6ZGVj
bHZhbDxUJj4oKSwgc3RkOjpkZWNsdmFsPFQmPigpKSkpCi0gIHsKLSAgICBpZiAgICAgIChpbml0
aWFsaXplZCgpID09IHRydWUgICYmIHJocy5pbml0aWFsaXplZCgpID09IGZhbHNlKSB7IHJocy5p
bml0aWFsaXplKHN0ZDo6bW92ZSgqKnRoaXMpKTsgY2xlYXIoKTsgfQotICAgIGVsc2UgaWYgKGlu
aXRpYWxpemVkKCkgPT0gZmFsc2UgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgaW5p
dGlhbGl6ZShzdGQ6Om1vdmUoKnJocykpOyByaHMuY2xlYXIoKTsgfQotICAgIGVsc2UgaWYgKGlu
aXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIHsgdXNp
bmcgc3RkOjpzd2FwOyBzd2FwKCoqdGhpcywgKnJocyk7IH0KLSAgfQotCi0gIC8vIDIwLjUuNC41
LCBPYnNlcnZlcnMKLQotICBleHBsaWNpdCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IF9fTk9FWENFUFQgeyByZXR1cm4gaW5pdGlhbGl6ZWQoKTsgfQotCi0gIGNvbnN0ZXhwciBUIGNv
bnN0KiBvcGVyYXRvciAtPigpIGNvbnN0IHsKLSAgICByZXR1cm4gVFIyX09QVElPTkFMX0FTU0VS
VEVEX0VYUFJFU1NJT04oaW5pdGlhbGl6ZWQoKSwgZGF0YXB0cigpKTsKLSAgfQotCi0jIGlmIE9Q
VElPTkFMX0hBU19NT1ZFX0FDQ0VTU09SUyA9PSAxCi0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05T
VEVYUFIgVCogb3BlcmF0b3IgLT4oKSB7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIg
c3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4
cHIgY29udGV4dC4KLSAgICAvLyBDT05TVEVYUFJfQVNTRVJUKGluaXRpYWxpemVkKCkpOwotICAg
IHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQotICBjb25zdGV4cHIgVCBjb25zdCYgb3BlcmF0b3Ig
KigpIGNvbnN0JiB7Ci0gICAgcmV0dXJuIFRSMl9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9O
KGluaXRpYWxpemVkKCksIGNvbnRhaW5lZF92YWwoKSk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRB
QkxFX0NPTlNURVhQUiBUJiBvcGVyYXRvciAqKCkgJiB7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0
aGUgY29udGV4cHIgY29udGV4dC4KLSAgICAvLyBDT05TVEVYUFJfQVNTRVJUKGluaXRpYWxpemVk
KCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRB
QkxFX0NPTlNURVhQUiBUJiYgb3BlcmF0b3IgKigpICYmIHsKLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBvZmZlciBzcGVjaWFsIGFzc2VydCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHVuZGVy
IHRoZSBjb250ZXhwciBjb250ZXh0LgotICAgIC8vIENPTlNURVhQUl9BU1NFUlQoaW5pdGlhbGl6
ZWQoKSk7Ci0gICAgcmV0dXJuIGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKGNvbnRhaW5lZF92YWwo
KSk7Ci0gIH0KLQotICBjb25zdGV4cHIgVCBjb25zdCYgdmFsdWUoKSBjb25zdCYgewotICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2Fu
IGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIGluaXRp
YWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkgOiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2Vzcygi
YmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250YWluZWRfdmFsKCkpOwotICAgIHJldHVybiBjb250
YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiB2YWx1
ZSgpICYgewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1
bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCi0gICAg
Ly8gcmV0dXJuIGluaXRpYWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkgOiAodGhyb3cgYmFkX29w
dGlvbmFsX2FjY2VzcygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250YWluZWRfdmFsKCkpOwot
ICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NP
TlNURVhQUiBUJiYgdmFsdWUoKSAmJiB7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIg
c3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4
cHIgY29udGV4dC4KLSAgICAvLyBpZiAoIWluaXRpYWxpemVkKCkpIF9fVEhST1dfRVhDRVBUSU9O
KGJhZF9vcHRpb25hbF9hY2Nlc3MoImJhZCBvcHRpb25hbCBhY2Nlc3MiKSk7Ci0gICAgcmV0dXJu
IHN0ZDo6bW92ZShjb250YWluZWRfdmFsKCkpOwotICB9Ci0KLSMgZWxzZQotCi0gIFQqIG9wZXJh
dG9yIC0+KCkgewotICAgIGFzc2VydCAoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRhdGFw
dHIoKTsKLSAgfQotCi0gIGNvbnN0ZXhwciBUIGNvbnN0JiBvcGVyYXRvciAqKCkgY29uc3Qgewot
ICAgIHJldHVybiBUUjJfT1BUSU9OQUxfQVNTRVJURURfRVhQUkVTU0lPTihpbml0aWFsaXplZCgp
LCBjb250YWluZWRfdmFsKCkpOwotICB9Ci0KLSAgVCYgb3BlcmF0b3IgKigpIHsKLSAgICBhc3Nl
cnQgKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQot
ICBjb25zdGV4cHIgVCBjb25zdCYgdmFsdWUoKSBjb25zdCB7Ci0gICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRl
ciB0aGUgY29udGV4cHIgY29udGV4dC4KLSAgICAvLyByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IGNv
bnRhaW5lZF92YWwoKSA6ICh0aHJvdyBiYWRfb3B0aW9uYWxfYWNjZXNzKCJiYWQgb3B0aW9uYWwg
YWNjZXNzIiksIGNvbnRhaW5lZF92YWwoKSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92YWwoKTsK
LSAgfQotCi0gIFQmIHZhbHVlKCkgewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNw
ZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHBy
IGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIGluaXRpYWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkg
OiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2VzcygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250
YWluZWRfdmFsKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotIyBlbmRp
ZgotCi0jIGlmIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIFQgdmFsdWVfb3IoViYmIHYpIGNvbnN0JgotICB7Ci0g
ICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpj
b25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotIyAgIGlmIE9QVElPTkFMX0hBU19NT1ZF
X0FDQ0VTU09SUyA9PSAxCi0KLSAgdGVtcGxhdGUgPGNsYXNzIFY+Ci0gIE9QVElPTkFMX01VVEFC
TEVfQ09OU1RFWFBSIFQgdmFsdWVfb3IoViYmIHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRoaXMg
PyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PG9wdGlvbmFsPFQ+Jj4oKnRoaXMp
LmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhw
cl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0jICAgZWxzZQogCi0gIHRlbXBsYXRlIDxjbGFzcyBW
PgotICBUIHZhbHVlX29yKFYmJiB2KSAmJgotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gZGV0YWls
Xzo6Y29uc3RleHByX21vdmUoY29uc3RfY2FzdDxvcHRpb25hbDxUPiY+KCp0aGlzKS5jb250YWlu
ZWRfdmFsKCkpIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2Fy
ZDxWPih2KSk7Ci0gIH0KLQotIyAgIGVuZGlmCi0KLSMgZWxzZQotCi0gIHRlbXBsYXRlIDxjbGFz
cyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZV9vcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVy
biAqdGhpcyA/ICoqdGhpcyA6IGRldGFpbF86OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHBy
X2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSMgZW5kaWYKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVSwg
Y2xhc3MuLi4gQXJncywgVFIyX09QVElPTkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4+KT4KKyAgICBPUFRJT05BTF9DT05TVEVYUFJf
SU5JVF9MSVNUIGV4cGxpY2l0IG9wdGlvbmFsKGluX3BsYWNlX3QsIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVPiBpbCwgQXJncyYmLi4uIGFyZ3MpCisgICAgICAgIDogT3B0aW9uYWxCYXNlPFQ+KGlu
X3BsYWNlX3R7fSwgaWwsIGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KQorICAgIHsKKyAgICB9CiAKLX07CisgICAgLy8gMjAuNS40LjIsIERlc3RydWN0b3IKKyAgICB+
b3B0aW9uYWwoKSA9IGRlZmF1bHQ7CiAKKyAgICAvLyAyMC41LjQuMywgYXNzaWdubWVudAorICAg
IG9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBUCisgICAgeworICAgICAg
ICBjbGVhcigpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3B0aW9uYWwm
IG9wZXJhdG9yPShjb25zdCBvcHRpb25hbCYgcmhzKQorICAgIHsKKyAgICAgICAgaWYgKGluaXRp
YWxpemVkKCkgPT0gdHJ1ZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkKKyAgICAgICAg
ICAgIGNsZWFyKCk7CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gZmFsc2UgJiYg
cmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkKKyAgICAgICAgICAgIGluaXRpYWxpemUoKnJocyk7
CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAmJiByaHMuaW5pdGlhbGl6
ZWQoKSA9PSB0cnVlKQorICAgICAgICAgICAgY29udGFpbmVkX3ZhbCgpID0gKnJoczsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wdGlvbmFsJiBvcGVyYXRvcj0ob3B0aW9u
YWwmJiByaHMpCisgICAgICAgIF9fTk9FWENFUFRfKGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlPFQ+Ojp2YWx1ZSYmIGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPFQ+Ojp2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpbml0aWFsaXplZCgpID09IHRydWUg
JiYgcmhzLmluaXRpYWxpemVkKCkgPT0gZmFsc2UpCisgICAgICAgICAgICBjbGVhcigpOworICAg
ICAgICBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFsaXplZCgp
ID09IHRydWUpCisgICAgICAgICAgICBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7CisgICAg
ICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9
PSB0cnVlKQorICAgICAgICAgICAgY29udGFpbmVkX3ZhbCgpID0gc3RkOjptb3ZlKCpyaHMpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFU+Cisg
ICAgYXV0byBvcGVyYXRvcj0oVSYmIHYpCisgICAgICAgIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPAorICAgICAgICAgICAgc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5
cGUsIFQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgIG9wdGlvbmFsJj46OnR5cGUKKyAgICB7CisgICAg
ICAgIGlmIChpbml0aWFsaXplZCgpKSB7CisgICAgICAgICAgICBjb250YWluZWRfdmFsKCkgPSBz
dGQ6OmZvcndhcmQ8VT4odik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbml0aWFs
aXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgZW1wbGFj
ZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIGluaXRp
YWxpemUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KKyAgICB2b2lkIGVtcGxhY2Uoc3RkOjppbml0aWFs
aXplcl9saXN0PFU+IGlsLCBBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIGNsZWFyKCk7
CisgICAgICAgIGluaXRpYWxpemU8VSwgQXJncy4uLj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7CisgICAgfQorCisgICAgLy8gMjAuNS40LjQsIFN3YXAKKyAgICB2b2lkIHN3YXAo
b3B0aW9uYWw8VD4mIHJocykgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8VD46OnZhbHVlJiYgX19OT0VYQ0VQVF8oc3dhcChzdGQ6OmRlY2x2YWw8VCY+
KCksIHN0ZDo6ZGVjbHZhbDxUJj4oKSkpKQorICAgIHsKKyAgICAgICAgaWYgKGluaXRpYWxpemVk
KCkgPT0gdHJ1ZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkgeworICAgICAgICAgICAg
cmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhpcykpOworICAgICAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFs
aXplZCgpID09IHRydWUpIHsKKyAgICAgICAgICAgIGluaXRpYWxpemUoc3RkOjptb3ZlKCpyaHMp
KTsKKyAgICAgICAgICAgIHJocy5jbGVhcigpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxp
emVkKCkgPT0gdHJ1ZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSB7CisgICAgICAgICAg
ICB1c2luZyBzdGQ6OnN3YXA7CisgICAgICAgICAgICBzd2FwKCoqdGhpcywgKnJocyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAyMC41LjQuNSwgT2JzZXJ2ZXJzCisKKyAgICBleHBsaWNp
dCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9fTk9FWENFUFQgeyByZXR1cm4gaW5p
dGlhbGl6ZWQoKTsgfQorCisgICAgY29uc3RleHByIFQgY29uc3QqIG9wZXJhdG9yLT4oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSMl9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9O
KGluaXRpYWxpemVkKCksIGRhdGFwdHIoKSk7CisgICAgfQorCisjaWYgT1BUSU9OQUxfSEFTX01P
VkVfQUNDRVNTT1JTID09IDEKKworICAgIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQqIG9w
ZXJhdG9yLT4oKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3Bl
Y2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIg
Y29udGV4dC4KKyAgICAgICAgLy8gQ09OU1RFWFBSX0FTU0VSVChpbml0aWFsaXplZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGRhdGFwdHIoKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgVCBjb25zdCYg
b3BlcmF0b3IqKCkgY29uc3QgJgorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSMl9PUFRJT05BTF9B
U1NFUlRFRF9FWFBSRVNTSU9OKGluaXRpYWxpemVkKCksIGNvbnRhaW5lZF92YWwoKSk7CisgICAg
fQorCisgICAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCYgb3BlcmF0b3IqKCkgJgorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVu
Y3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KKyAgICAg
ICAgLy8gQ09OU1RFWFBSX0FTU0VSVChpbml0aWFsaXplZCgpKTsKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5lZF92YWwoKTsKKyAgICB9CisKKyAgICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBU
JiYgb3BlcmF0b3IqKCkgJiYKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9m
ZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNv
bnRleHByIGNvbnRleHQuCisgICAgICAgIC8vIENPTlNURVhQUl9BU1NFUlQoaW5pdGlhbGl6ZWQo
KSk7CisgICAgICAgIHJldHVybiBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb250YWluZWRfdmFs
KCkpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBUIGNvbnN0JiB2YWx1ZSgpIGNvbnN0ICYKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1
bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCisgICAg
ICAgIC8vIHJldHVybiBpbml0aWFsaXplZCgpID8gY29udGFpbmVkX3ZhbCgpIDogKHRocm93IGJh
ZF9vcHRpb25hbF9hY2Nlc3MoImJhZCBvcHRpb25hbCBhY2Nlc3MiKSwgY29udGFpbmVkX3ZhbCgp
KTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5lZF92YWwoKTsKKyAgICB9CisKKyAgICBPUFRJT05B
TF9NVVRBQkxFX0NPTlNURVhQUiBUJiB2YWx1ZSgpICYKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVz
ZWQgdW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCisgICAgICAgIC8vIHJldHVybiBpbml0aWFs
aXplZCgpID8gY29udGFpbmVkX3ZhbCgpIDogKHRocm93IGJhZF9vcHRpb25hbF9hY2Nlc3MoImJh
ZCBvcHRpb25hbCBhY2Nlc3MiKSwgY29udGFpbmVkX3ZhbCgpKTsKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5lZF92YWwoKTsKKyAgICB9CisKKyAgICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBU
JiYgdmFsdWUoKSAmJgorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIg
c3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4
cHIgY29udGV4dC4KKyAgICAgICAgLy8gaWYgKCFpbml0aWFsaXplZCgpKSBfX1RIUk9XX0VYQ0VQ
VElPTihiYWRfb3B0aW9uYWxfYWNjZXNzKCJiYWQgb3B0aW9uYWwgYWNjZXNzIikpOworICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlKGNvbnRhaW5lZF92YWwoKSk7CisgICAgfQorCisjZWxzZQorCisg
ICAgVCogb3BlcmF0b3ItPigpCisgICAgeworICAgICAgICBhc3NlcnQoaW5pdGlhbGl6ZWQoKSk7
CisgICAgICAgIHJldHVybiBkYXRhcHRyKCk7CisgICAgfQorCisgICAgY29uc3RleHByIFQgY29u
c3QmIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVFIyX09QVElPTkFM
X0FTU0VSVEVEX0VYUFJFU1NJT04oaW5pdGlhbGl6ZWQoKSwgY29udGFpbmVkX3ZhbCgpKTsKKyAg
ICB9CisKKyAgICBUJiBvcGVyYXRvciooKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGluaXRpYWxp
emVkKCkpOworICAgICAgICByZXR1cm4gY29udGFpbmVkX3ZhbCgpOworICAgIH0KKworICAgIGNv
bnN0ZXhwciBUIGNvbnN0JiB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBvZmZlciBzcGVjaWFsIGFzc2VydCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2Vk
IHVuZGVyIHRoZSBjb250ZXhwciBjb250ZXh0LgorICAgICAgICAvLyByZXR1cm4gaW5pdGlhbGl6
ZWQoKSA/IGNvbnRhaW5lZF92YWwoKSA6ICh0aHJvdyBiYWRfb3B0aW9uYWxfYWNjZXNzKCJiYWQg
b3B0aW9uYWwgYWNjZXNzIiksIGNvbnRhaW5lZF92YWwoKSk7CisgICAgICAgIHJldHVybiBjb250
YWluZWRfdmFsKCk7CisgICAgfQorCisgICAgVCYgdmFsdWUoKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhhdCBjYW4g
YmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KKyAgICAgICAgLy8gcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkgOiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2Vz
cygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250YWluZWRfdmFsKCkpOworICAgICAgICByZXR1
cm4gY29udGFpbmVkX3ZhbCgpOworICAgIH0KKworI2VuZGlmCisKKyNpZiBPUFRJT05BTF9IQVNf
VEhJU19SVkFMVUVfUkVGUyA9PSAxCisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KKyAgICBjb25z
dGV4cHIgVCB2YWx1ZV9vcihWJiYgdikgY29uc3QgJgorICAgIHsKKyAgICAgICAgcmV0dXJuICp0
aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9y
d2FyZDxWPih2KSk7CisgICAgfQorCisjaWYgT1BUSU9OQUxfSEFTX01PVkVfQUNDRVNTT1JTID09
IDEKKworICAgIHRlbXBsYXRlIDxjbGFzcyBWPgorICAgIE9QVElPTkFMX01VVEFCTEVfQ09OU1RF
WFBSIFQgdmFsdWVfb3IoViYmIHYpICYmCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPyBk
ZXRhaWxfOjpjb25zdGV4cHJfbW92ZShjb25zdF9jYXN0PG9wdGlvbmFsPFQ+Jj4oKnRoaXMpLmNv
bnRhaW5lZF92YWwoKSkgOiBkZXRhaWxfOjpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9m
b3J3YXJkPFY+KHYpKTsKKyAgICB9CisKKyNlbHNlCisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVj4K
KyAgICBUIHZhbHVlX29yKFYmJiB2KSAmJgorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID8g
ZGV0YWlsXzo6Y29uc3RleHByX21vdmUoY29uc3RfY2FzdDxvcHRpb25hbDxUPiY+KCp0aGlzKS5j
b250YWluZWRfdmFsKCkpIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJf
Zm9yd2FyZDxWPih2KSk7CisgICAgfQorCisjZW5kaWYKKworI2Vsc2UKKworICAgIHRlbXBsYXRl
IDxjbGFzcyBWPgorICAgIGNvbnN0ZXhwciBUIHZhbHVlX29yKFYmJiB2KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVydDxUPihkZXRh
aWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7CisgICAgfQorCisjZW5kaWYKK307CiAKIHRl
bXBsYXRlIDxjbGFzcyBUPgotY2xhc3Mgb3B0aW9uYWw8VCY+Ci17Ci0gIHN0YXRpY19hc3NlcnQo
ICFzdGQ6OmlzX3NhbWU8VCwgbnVsbG9wdF90Pjo6dmFsdWUsICJiYWQgVCIgKTsKLSAgc3RhdGlj
X2Fzc2VydCggIXN0ZDo6aXNfc2FtZTxULCBpbl9wbGFjZV90Pjo6dmFsdWUsICJiYWQgVCIgKTsK
LSAgVCogcmVmOworY2xhc3Mgb3B0aW9uYWw8VCY+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
OmlzX3NhbWU8VCwgbnVsbG9wdF90Pjo6dmFsdWUsICJiYWQgVCIpOworICAgIHN0YXRpY19hc3Nl
cnQoIXN0ZDo6aXNfc2FtZTxULCBpbl9wbGFjZV90Pjo6dmFsdWUsICJiYWQgVCIpOworICAgIFQq
IHJlZjsKIAogcHVibGljOgorICAgIC8vIDIwLjUuNS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rp
b24KKyAgICBjb25zdGV4cHIgb3B0aW9uYWwoKSBfX05PRVhDRVBUIDogcmVmKG51bGxwdHIpIHt9
CiAKLSAgLy8gMjAuNS41LjEsIGNvbnN0cnVjdGlvbi9kZXN0cnVjdGlvbgotICBjb25zdGV4cHIg
b3B0aW9uYWwoKSBfX05PRVhDRVBUIDogcmVmKG51bGxwdHIpIHt9CisgICAgY29uc3RleHByIG9w
dGlvbmFsKG51bGxvcHRfdCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQogCi0gIGNvbnN0
ZXhwciBvcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KKyAg
ICBjb25zdGV4cHIgb3B0aW9uYWwoVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0
aWNfYWRkcmVzc29mKHYpKSB7fQogCi0gIGNvbnN0ZXhwciBvcHRpb25hbChUJiB2KSBfX05PRVhD
RVBUIDogcmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9CisgICAgb3B0aW9uYWwo
VCYmKSA9IGRlbGV0ZTsKIAotICBvcHRpb25hbChUJiYpID0gZGVsZXRlOworICAgIGNvbnN0ZXhw
ciBvcHRpb25hbChjb25zdCBvcHRpb25hbCYgcmhzKSBfX05PRVhDRVBUIDogcmVmKHJocy5yZWYp
IHt9CiAKLSAgY29uc3RleHByIG9wdGlvbmFsKGNvbnN0IG9wdGlvbmFsJiByaHMpIF9fTk9FWENF
UFQgOiByZWYocmhzLnJlZikge30KKyAgICBleHBsaWNpdCBjb25zdGV4cHIgb3B0aW9uYWwoaW5f
cGxhY2VfdCwgVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29m
KHYpKSB7fQogCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcHRpb25hbChpbl9wbGFjZV90LCBUJiB2
KSBfX05PRVhDRVBUIDogcmVmKGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2YodikpIHt9CisgICAg
ZXhwbGljaXQgb3B0aW9uYWwoaW5fcGxhY2VfdCwgVCYmKSA9IGRlbGV0ZTsKIAotICBleHBsaWNp
dCBvcHRpb25hbChpbl9wbGFjZV90LCBUJiYpID0gZGVsZXRlOworICAgIH5vcHRpb25hbCgpID0g
ZGVmYXVsdDsKIAotICB+b3B0aW9uYWwoKSA9IGRlZmF1bHQ7Ci0KLSAgLy8gMjAuNS41LjIsIG11
dGF0aW9uCi0gIG9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBUIHsKLSAg
ICByZWYgPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLSAgfQorICAgIC8vIDIwLjUuNS4y
LCBtdXRhdGlvbgorICAgIG9wdGlvbmFsJiBvcGVyYXRvcj0obnVsbG9wdF90KSBfX05PRVhDRVBU
CisgICAgeworICAgICAgICByZWYgPSBudWxscHRyOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQogCi0gIC8vIG9wdGlvbmFsJiBvcGVyYXRvcj0oY29uc3Qgb3B0aW9uYWwmIHJocykgX19O
T0VYQ0VQVCB7CisgICAgLy8gb3B0aW9uYWwmIG9wZXJhdG9yPShjb25zdCBvcHRpb25hbCYgcmhz
KSBfX05PRVhDRVBUIHsKICAgICAvLyByZWYgPSByaHMucmVmOwogICAgIC8vIHJldHVybiAqdGhp
czsKLSAgLy8gfQorICAgIC8vIH0KIAotICAvLyBvcHRpb25hbCYgb3BlcmF0b3I9KG9wdGlvbmFs
JiYgcmhzKSBfX05PRVhDRVBUIHsKKyAgICAvLyBvcHRpb25hbCYgb3BlcmF0b3I9KG9wdGlvbmFs
JiYgcmhzKSBfX05PRVhDRVBUIHsKICAgICAvLyByZWYgPSByaHMucmVmOwogICAgIC8vIHJldHVy
biAqdGhpczsKLSAgLy8gfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBhdXRvIG9wZXJh
dG9yPShVJiYgcmhzKSBfX05PRVhDRVBUCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmCi0g
IDwKLSAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlwZSwgb3B0aW9u
YWw8VCY+Pjo6dmFsdWUsCi0gICAgb3B0aW9uYWwmCi0gID46OnR5cGUKLSAgewotICAgIHJlZiA9
IHJocy5yZWY7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gIGF1dG8gb3BlcmF0b3I9KFUmJiByaHMpIF9fTk9FWENFUFQKLSAgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWYKLSAgPAotICAgICFzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNh
eTxVPjo6dHlwZSwgb3B0aW9uYWw8VCY+Pjo6dmFsdWUsCi0gICAgb3B0aW9uYWwmCi0gID46OnR5
cGUKLSAgPSBkZWxldGU7Ci0KLSAgdm9pZCBlbXBsYWNlKFQmIHYpIF9fTk9FWENFUFQgewotICAg
IHJlZiA9IGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2Yodik7Ci0gIH0KLQotICB2b2lkIGVtcGxh
Y2UoVCYmKSA9IGRlbGV0ZTsKLQotCi0gIHZvaWQgc3dhcChvcHRpb25hbDxUJj4mIHJocykgX19O
T0VYQ0VQVAotICB7Ci0gICAgc3RkOjpzd2FwKHJlZiwgcmhzLnJlZik7Ci0gIH0KLQotICAvLyAy
MC41LjUuMywgb2JzZXJ2ZXJzCi0gIGNvbnN0ZXhwciBUKiBvcGVyYXRvci0+KCkgY29uc3Qgewot
ICAgIHJldHVybiBUUjJfT1BUSU9OQUxfQVNTRVJURURfRVhQUkVTU0lPTihyZWYsIHJlZik7Ci0g
IH0KLQotICBjb25zdGV4cHIgVCYgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiBUUjJf
T1BUSU9OQUxfQVNTRVJURURfRVhQUkVTU0lPTihyZWYsICpyZWYpOwotICB9Ci0KLSAgY29uc3Rl
eHByIFQmIHZhbHVlKCkgY29uc3QgewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNw
ZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHBy
IGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIHJlZiA/ICpyZWYgOiAodGhyb3cgYmFkX29wdGlvbmFs
X2FjY2VzcygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCAqcmVmKTsKLSAgICByZXR1cm4gKnJlZjsK
LSAgfQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VY
Q0VQVCB7Ci0gICAgcmV0dXJuIHJlZiAhPSBudWxscHRyOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNs
YXNzIFY+Ci0gIGNvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlIHZhbHVlX29y
KFYmJiB2KSBjb25zdAotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6
Y29udmVydDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpjb25zdGV4cHJf
Zm9yd2FyZDxWPih2KSk7Ci0gIH0KLX07CisgICAgLy8gfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykgX19OT0VYQ0VQVAorICAgICAgICAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBl
bmFtZSBzdGQ6OmRlY2F5PFU+Ojp0eXBlLCBvcHRpb25hbDxUJj4+Ojp2YWx1ZSwKKyAgICAgICAg
ICAgIG9wdGlvbmFsJj46OnR5cGUKKyAgICB7CisgICAgICAgIHJlZiA9IHJocy5yZWY7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAg
ICBhdXRvIG9wZXJhdG9yPShVJiYgcmhzKSBfX05PRVhDRVBUCisgICAgICAgIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6
OmRlY2F5PFU+Ojp0eXBlLCBvcHRpb25hbDxUJj4+Ojp2YWx1ZSwKKyAgICAgICAgICAgIG9wdGlv
bmFsJj46OnR5cGUgPSBkZWxldGU7CiAKLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3Mgb3B0aW9u
YWw8VCYmPgotewotICBzdGF0aWNfYXNzZXJ0KCBzaXplb2YoVCkgPT0gMCwgIm9wdGlvbmFsIHJ2
YWx1ZSByZWZlcmVuY2VzIGRpc2FsbG93ZWQiICk7CisgICAgdm9pZCBlbXBsYWNlKFQmIHYpIF9f
Tk9FWENFUFQKKyAgICB7CisgICAgICAgIHJlZiA9IGRldGFpbF86OnN0YXRpY19hZGRyZXNzb2Yo
dik7CisgICAgfQorCisgICAgdm9pZCBlbXBsYWNlKFQmJikgPSBkZWxldGU7CisKKyAgICB2b2lk
IHN3YXAob3B0aW9uYWw8VCY+JiByaHMpIF9fTk9FWENFUFQKKyAgICB7CisgICAgICAgIHN0ZDo6
c3dhcChyZWYsIHJocy5yZWYpOworICAgIH0KKworICAgIC8vIDIwLjUuNS4zLCBvYnNlcnZlcnMK
KyAgICBjb25zdGV4cHIgVCogb3BlcmF0b3ItPigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gVFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJT04ocmVmLCByZWYpOworICAgIH0KKwor
ICAgIGNvbnN0ZXhwciBUJiBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFRSMl9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9OKHJlZiwgKnJlZik7CisgICAgfQorCisg
ICAgY29uc3RleHByIFQmIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQg
dW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCisgICAgICAgIC8vIHJldHVybiByZWYgPyAqcmVm
IDogKHRocm93IGJhZF9vcHRpb25hbF9hY2Nlc3MoImJhZCBvcHRpb25hbCBhY2Nlc3MiKSwgKnJl
Zik7CisgICAgICAgIHJldHVybiAqcmVmOworICAgIH0KKworICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBvcGVyYXRvciBib29sKCkgY29uc3QgX19OT0VYQ0VQVAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlZiAhPSBudWxscHRyOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBWPgorICAgIGNv
bnN0ZXhwciB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlIHZhbHVlX29yKFYmJiB2KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDogZGV0YWlsXzo6Y29udmVy
dDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2Fy
ZDxWPih2KSk7CisgICAgfQogfTsKIAordGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBvcHRpb25h
bDxUJiY+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSAwLCAib3B0aW9uYWwgcnZh
bHVlIHJlZmVyZW5jZXMgZGlzYWxsb3dlZCIpOworfTsKIAogLy8gMjAuNS44LCBSZWxhdGlvbmFs
IG9wZXJhdG9ycwotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
Y29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQordGVtcGxhdGUgPGNs
YXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBj
b25zdCBvcHRpb25hbDxUPiYgeSkKIHsKLSAgcmV0dXJuIGJvb2woeCkgIT0gYm9vbCh5KSA/IGZh
bHNlIDogYm9vbCh4KSA9PSBmYWxzZSA/IHRydWUgOiAqeCA9PSAqeTsKKyAgICByZXR1cm4gYm9v
bCh4KSAhPSBib29sKHkpID8gZmFsc2UgOiBib29sKHgpID09IGZhbHNlID8gdHJ1ZSA6ICp4ID09
ICp5OwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBvcHRpb25hbDxUPiYgeCwgY29uc3Qgb3B0aW9uYWw8VD4mIHkpCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNv
bnN0IG9wdGlvbmFsPFQ+JiB5KQogewotICByZXR1cm4gISh4ID09IHkpOworICAgIHJldHVybiAh
KHggPT0geSk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cjwoY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3Qgb3B0aW9uYWw8VD4mIHgs
IGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQogewotICByZXR1cm4gKCF5KSA/IGZhbHNlIDogKCF4KSA/
IHRydWUgOiAqeCA8ICp5OworICAgIHJldHVybiAoIXkpID8gZmFsc2UgOiAoIXgpID8gdHJ1ZSA6
ICp4IDwgKnk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj4oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qgb3B0aW9uYWw8VD4mIHgs
IGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQogewotICByZXR1cm4gKHkgPCB4KTsKKyAgICByZXR1cm4g
KHkgPCB4KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4
LCBjb25zdCBvcHRpb25hbDxUPiYgeSkKIHsKLSAgcmV0dXJuICEoeSA8IHgpOworICAgIHJldHVy
biAhKHkgPCB4KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPj0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+JiB5KQordGVtcGxh
dGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBvcHRpb25hbDxUPiYgeSkKIHsKLSAgcmV0dXJuICEoeCA8IHkpOworICAgIHJl
dHVybiAhKHggPCB5KTsKIH0KIAotCiAvLyAyMC41LjksIENvbXBhcmlzb24gd2l0aCBudWxsb3B0
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBvcHRp
b25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2Nv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkg
X19OT0VYQ0VQVAogewotICByZXR1cm4gKCF4KTsKKyAgICByZXR1cm4gKCF4KTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obnVsbG9wdF90LCBjb25z
dCBvcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpIF9fTk9F
WENFUFQKIHsKLSAgcmV0dXJuICgheCk7CisgICAgcmV0dXJuICgheCk7CiB9CiAKLXRlbXBsYXRl
IDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4
LCBudWxsb3B0X3QpIF9fTk9FWENFUFQKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBvcHRpb25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBU
CiB7Ci0gIHJldHVybiBib29sKHgpOworICAgIHJldHVybiBib29sKHgpOwogfQogCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShudWxsb3B0X3QsIGNvbnN0IG9w
dGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0obnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQ
VAogewotICByZXR1cm4gYm9vbCh4KTsKKyAgICByZXR1cm4gYm9vbCh4KTsKIH0KIAotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25hbDxUPiYs
IG51bGxvcHRfdCkgX19OT0VYQ0VQVAordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjwoY29uc3Qgb3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9fTk9FWENFUFQKIHsK
LSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChudWxsb3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+
JiB4KSBfX05PRVhDRVBUCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJh
dG9yPChudWxsb3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCiB7Ci0gIHJl
dHVybiBib29sKHgpOworICAgIHJldHVybiBib29sKHgpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBvcHRpb25hbDxUPiYgeCwgbnVsbG9w
dF90KSBfX05PRVhDRVBUCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJh
dG9yPD0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAogewotICBy
ZXR1cm4gKCF4KTsKKyAgICByZXR1cm4gKCF4KTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPD0obnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxUPiYpIF9f
Tk9FWENFUFQKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShu
dWxsb3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQVAogewotICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPihjb25zdCBvcHRpb25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBU
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBvcHRp
b25hbDxUPiYgeCwgbnVsbG9wdF90KSBfX05PRVhDRVBUCiB7Ci0gIHJldHVybiBib29sKHgpOwor
ICAgIHJldHVybiBib29sKHgpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mKSBfX05PRVhDRVBUCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihudWxsb3B0X3QsIGNv
bnN0IG9wdGlvbmFsPFQ+JikgX19OT0VYQ0VQVAogewotICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBvcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQ+Jiwg
bnVsbG9wdF90KSBfX05PRVhDRVBUCiB7Ci0gIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShudWxs
b3B0X3QsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KSBfX05PRVhDRVBUCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxU
PiYgeCkgX19OT0VYQ0VQVAogewotICByZXR1cm4gKCF4KTsKKyAgICByZXR1cm4gKCF4KTsKIH0K
IAotCi0KIC8vIDIwLjUuMTAsIENvbXBhcmlzb24gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBvcHRpb25hbDxUPiYgeCwgY29uc3QgVCYg
dikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBv
cHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2
IDogZmFsc2U7CisgICAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDogZmFsc2U7CiB9CiAKLXRl
bXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYsIGNv
bnN0IG9wdGlvbmFsPFQ+JiB4KQordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4g
Ym9vbCh4KSA/IHYgPT0gKnggOiBmYWxzZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/IHYgPT0gKngg
OiBmYWxzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
IT0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQm
IHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7CisgICAgcmV0dXJuIGJv
b2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCit0ZW1w
bGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29u
c3Qgb3B0aW9uYWw8VD4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRydWU7
CisgICAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDogdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25hbDxUPiYgeCwgY29u
c3QgVCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4
IDwgdiA6IHRydWU7CisgICAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwogfQogCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNv
bnN0IG9wdGlvbmFsPFQ+JiB4KQordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpCiB7Ci0gIHJldHVybiBi
b29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRy
dWU7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29u
c3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0
ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBvcHRpb25hbDxUPiYgeCwgY29uc3QgVCYgdikKIHsK
LSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBmYWxzZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/
ICp4ID4gdiA6IGZhbHNlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KQordGVtcGxhdGUgPGNs
YXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9u
YWw8VD4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7CisgICAgcmV0
dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYp
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qgb3B0
aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6
IGZhbHNlOworICAgIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwogfQogCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25z
dCBvcHRpb25hbDxUPiYgeCkKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKIHsKLSAgcmV0dXJuIGJv
b2woeCkgPyB2IDw9ICp4IDogZmFsc2U7CisgICAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDog
ZmFsc2U7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2KQordGVtcGxhdGUgPGNsYXNzIFQ+Citj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBUJiB2
KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOworICAgIHJldHVybiBib29s
KHgpID8gKnggPD0gdiA6IHRydWU7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KQordGVtcGxh
dGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0
IG9wdGlvbmFsPFQ+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwor
ICAgIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7CiB9CiAKLQogLy8gQ29tcGFyaXNv
biBvZiBvcHRpb25hbDxUJj4gd2l0aCBUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBvcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0
ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qgb3B0aW9uYWw8VCY+
JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsK
KyAgICByZXR1cm4gYm9vbCh4KSA/ICp4ID09IHYgOiBmYWxzZTsKIH0KIAotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9u
YWw8VCY+JiB4KQordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkg
PyB2ID09ICp4IDogZmFsc2U7CisgICAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDogZmFsc2U7
CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IG9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBvcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCiB7
Ci0gIHJldHVybiBib29sKHgpID8gKnggIT0gdiA6IHRydWU7CisgICAgcmV0dXJuIGJvb2woeCkg
PyAqeCAhPSB2IDogdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VCY+JiB4KQordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IG9w
dGlvbmFsPFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDogdHJ1ZTsKKyAg
ICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3Qg
VCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IG9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8
IHYgOiB0cnVlOworICAgIHJldHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKIH0KIAotdGVt
cGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBUJiB2LCBjb25z
dCBvcHRpb25hbDxUJj4mIHgpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPihjb25zdCBUJiB2LCBjb25zdCBvcHRpb25hbDxUJj4mIHgpCiB7Ci0gIHJldHVybiBi
b29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRy
dWU7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29u
c3Qgb3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qgb3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQog
ewotICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZhbHNlOworICAgIHJldHVybiBib29sKHgp
ID8gKnggPiB2IDogZmFsc2U7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VCY+JiB4KQordGVtcGxhdGUg
PGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgVCYgdiwgY29uc3Qgb3B0
aW9uYWw8VCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPCAqeCA6IGZhbHNlOworICAg
IHJldHVybiBib29sKHgpID8gdiA8ICp4IDogZmFsc2U7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3Qg
VCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBvcHRpb25hbDxUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVybiBib29sKHgpID8gKngg
Pj0gdiA6IGZhbHNlOworICAgIHJldHVybiBib29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwogfQog
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2
LCBjb25zdCBvcHRpb25hbDxUJj4mIHgpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPD0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VCY+JiB4KQogewotICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPD0gKnggOiBmYWxzZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/IHYg
PD0gKnggOiBmYWxzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPD0oY29uc3Qgb3B0aW9uYWw8VCY+JiB4LCBjb25zdCBUJiB2KQordGVtcGxhdGUgPGNs
YXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwg
Y29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsKKyAgICBy
ZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25zdCBvcHRpb25hbDxUJj4m
IHgpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qg
VCYgdiwgY29uc3Qgb3B0aW9uYWw8VCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0g
KnggOiB0cnVlOworICAgIHJldHVybiBib29sKHgpID8gdiA+PSAqeCA6IHRydWU7CiB9CiAKIC8v
IENvbXBhcmlzb24gb2Ygb3B0aW9uYWw8VCBjb25zdCY+IHdpdGggVAotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4
LCBjb25zdCBUJiB2KQordGVtcGxhdGUgPGNsYXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJu
IGJvb2woeCkgPyAqeCA9PSB2IDogZmFsc2U7CisgICAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2
IDogZmFsc2U7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKK3RlbXBsYXRlIDxj
bGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB2LCBjb25zdCBvcHRp
b25hbDxjb25zdCBUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNl
OworICAgIHJldHVybiBib29sKHgpID8gdiA9PSAqeCA6IGZhbHNlOwogfQogCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBvcHRpb25hbDxjb25zdCBU
Jj4mIHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQogewotICBy
ZXR1cm4gYm9vbCh4KSA/ICp4ICE9IHYgOiB0cnVlOworICAgIHJldHVybiBib29sKHgpID8gKngg
IT0gdiA6IHRydWU7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKK3RlbXBsYXRl
IDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB2LCBjb25zdCBv
cHRpb25hbDxjb25zdCBUJj4mIHgpCiB7Ci0gIHJldHVybiBib29sKHgpID8gdiAhPSAqeCA6IHRy
dWU7CisgICAgcmV0dXJuIGJvb2woeCkgPyB2ICE9ICp4IDogdHJ1ZTsKIH0KIAotdGVtcGxhdGUg
PGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25hbDxjb25zdCBU
Jj4mIHgsIGNvbnN0IFQmIHYpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBvcHRpb25hbDxjb25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJl
dHVybiBib29sKHgpID8gKnggPCB2IDogdHJ1ZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/ICp4IDwg
diA6IHRydWU7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj4oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4KQordGVtcGxhdGUgPGNs
YXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9u
YWw8Y29uc3QgVCY+JiB4KQogewotICByZXR1cm4gYm9vbCh4KSA/IHYgPiAqeCA6IHRydWU7Cisg
ICAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwg
Y29uc3QgVCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKIHsKLSAgcmV0dXJuIGJv
b2woeCkgPyAqeCA+IHYgOiBmYWxzZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/ICp4ID4gdiA6IGZh
bHNlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKK3RlbXBsYXRlIDxjbGFzcyBU
PgorY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNv
bnN0IFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDwgKnggOiBmYWxzZTsKKyAgICBy
ZXR1cm4gYm9vbCh4KSA/IHYgPCAqeCA6IGZhbHNlOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBvcHRpb25hbDxjb25zdCBUJj4mIHgsIGNv
bnN0IFQmIHYpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0o
Y29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4LCBjb25zdCBUJiB2KQogewotICByZXR1cm4gYm9v
bCh4KSA/ICp4ID49IHYgOiBmYWxzZTsKKyAgICByZXR1cm4gYm9vbCh4KSA/ICp4ID49IHYgOiBm
YWxzZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0o
Y29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4KQordGVtcGxhdGUgPGNsYXNz
IFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFs
PGNvbnN0IFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Cisg
ICAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7CiB9CiAKLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYg
eCwgY29uc3QgVCYgdikKK3RlbXBsYXRlIDxjbGFzcyBUPgorY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBvcHRpb25hbDxjb25zdCBUJj4mIHgsIGNvbnN0IFQmIHYpCiB7Ci0gIHJldHVy
biBib29sKHgpID8gKnggPD0gdiA6IHRydWU7CisgICAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2
IDogdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4KQordGVtcGxhdGUgPGNs
YXNzIFQ+Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlv
bmFsPGNvbnN0IFQmPiYgeCkKIHsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4IDogdHJ1ZTsK
KyAgICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwogfQogCi0KIC8vIDIwLjUuMTIs
IFNwZWNpYWxpemVkIGFsZ29yaXRobXMKIHRlbXBsYXRlIDxjbGFzcyBUPgogdm9pZCBzd2FwKG9w
dGlvbmFsPFQ+JiB4LCBvcHRpb25hbDxUPiYgeSkgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oeC5z
d2FwKHkpKSkKIHsKLSAgeC5zd2FwKHkpOworICAgIHguc3dhcCh5KTsKIH0KIAotCiB0ZW1wbGF0
ZSA8Y2xhc3MgVD4KIGNvbnN0ZXhwciBvcHRpb25hbDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0
eXBlPiBtYWtlX29wdGlvbmFsKFQmJiB2KQogewotICByZXR1cm4gb3B0aW9uYWw8dHlwZW5hbWUg
c3RkOjpkZWNheTxUPjo6dHlwZT4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8VD4odikpOwor
ICAgIHJldHVybiBvcHRpb25hbDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxf
Ojpjb25zdGV4cHJfZm9yd2FyZDxUPih2KSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBYPgogY29u
c3RleHByIG9wdGlvbmFsPFgmPiBtYWtlX29wdGlvbmFsKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
WD4gdikKIHsKLSAgcmV0dXJuIG9wdGlvbmFsPFgmPih2LmdldCgpKTsKKyAgICByZXR1cm4gb3B0
aW9uYWw8WCY+KHYuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBzdGQKQEAgLTEwNjgsOCAr
MTE5MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAvLyAtLSBXZWJLaXQgQWRkaXRpb25zIC0tCiB0
ZW1wbGF0ZSA8Y2xhc3MgT3B0aW9uYWxUeXBlLCBjbGFzcyBDYWxsYmFjaz4KLUFMV0FZU19JTkxJ
TkUKLWF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBj
YWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCitBTFdBWVNfSU5M
SU5FIGF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBj
YWxsYmFjaykgLT4gdHlwZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCiB7CiAgICAgaWYg
KG9wdGlvbmFsKQogICAgICAgICByZXR1cm4gKm9wdGlvbmFsOwpAQCAtMTA3OCwzMiArMTIwMCwz
MSBAQCBhdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlwZSBvcHRpb25hbCwgQ2FsbGJhY2sg
Y2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbgogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotbmFt
ZXNwYWNlIHN0ZAotewotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RydWN0IGhhc2g8c3Rk
OjpvcHRpb25hbDxUPj4KLSAgeworbmFtZXNwYWNlIHN0ZCB7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0cnVjdCBoYXNoPHN0ZDo6b3B0aW9uYWw8VD4+IHsKICAgICB0eXBlZGVmIHR5cGVuYW1l
IGhhc2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgIHR5cGVkZWYgc3RkOjpvcHRp
b25hbDxUPiBhcmd1bWVudF90eXBlOwogCi0gICAgY29uc3RleHByIHJlc3VsdF90eXBlIG9wZXJh
dG9yKCkoYXJndW1lbnRfdHlwZSBjb25zdCYgYXJnKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYXJn
ID8gc3RkOjpoYXNoPFQ+e30oKmFyZykgOiByZXN1bHRfdHlwZXt9OworICAgIGNvbnN0ZXhwciBy
ZXN1bHRfdHlwZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJnKSA6IHJlc3VsdF90
eXBle307CiAgICAgfQotICB9OworfTsKIAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3Ry
dWN0IGhhc2g8c3RkOjpvcHRpb25hbDxUJj4+Ci0gIHsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IGhhc2g8c3RkOjpvcHRpb25hbDxUJj4+IHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIGhh
c2g8VD46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgIHR5cGVkZWYgc3RkOjpvcHRpb25h
bDxUJj4gYXJndW1lbnRfdHlwZTsKIAotICAgIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBvcGVyYXRv
cigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGFyZykgY29uc3QgewotICAgICAgcmV0dXJuIGFyZyA/
IHN0ZDo6aGFzaDxUPnt9KCphcmcpIDogcmVzdWx0X3R5cGV7fTsKKyAgICBjb25zdGV4cHIgcmVz
dWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBhcmcpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+e30oKmFyZykgOiByZXN1bHRfdHlw
ZXt9OwogICAgIH0KLSAgfTsKLX0KK307Cit9IC8vIG5hbWVzcGFjZSBzdGQKIAotIyB1bmRlZiBU
UjJfT1BUSU9OQUxfUkVRVUlSRVMKLSMgdW5kZWYgVFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJF
U1NJT04KKyN1bmRlZiBUUjJfT1BUSU9OQUxfUkVRVUlSRVMKKyN1bmRlZiBUUjJfT1BUSU9OQUxf
QVNTRVJURURfRVhQUkVTU0lPTgogCiB1c2luZyBXVEY6OnZhbHVlT3JDb21wdXRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>309082</attachid>
            <date>2017-05-04 12:15:39 -0700</date>
            <delta_ts>2017-05-04 12:15:39 -0700</delta_ts>
            <desc>Style checker results</desc>
            <filename>style-results-optional.txt</filename>
            <type>text/plain</type>
            <size>12500</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">RVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MTI0OiAgT25lIHNwYWNlIGJlZm9yZSBl
bmQgb2YgbGluZSBjb21tZW50cyAgW3doaXRlc3BhY2UvY29tbWVudHNdIFs1XQpFUlJPUjogU291
cmNlL1dURi93dGYvT3B0aW9uYWwuaDoyMzA6ICBUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQg
b2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdCkVSUk9SOiBTb3Vy
Y2UvV1RGL3d0Zi9PcHRpb25hbC5oOjIzNjogIFRoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBv
ZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNvdXJj
ZS9XVEYvd3RmL09wdGlvbmFsLmg6MjQzOiAgVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9m
IHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XQpFUlJPUjogU291cmNl
L1dURi93dGYvT3B0aW9uYWwuaDoyNzI6ICBzdGF0aWNfYWRkcmVzc29mIGlzIGluY29ycmVjdGx5
IG5hbWVkLiBEb24ndCB1c2UgdW5kZXJzY29yZXMgaW4geW91ciBpZGVudGlmaWVyIG5hbWVzLiAg
W3JlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3Jlc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0
Zi9PcHRpb25hbC5oOjI4NDogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNwYWNlL2Jy
YWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjI4NDogIE1pc3Npbmcg
c3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2Uv
V1RGL3d0Zi9PcHRpb25hbC5oOjI4ODogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNw
YWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjI4ODogIE1p
c3Npbmcgc3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBT
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjI5NDogIE1pc3Npbmcgc3BhY2UgaW5zaWRlIHsgfS4g
IFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
OjI5NjogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVS
Uk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjMwMTogIGJhZF9vcHRpb25hbF9hY2Nlc3Mg
aXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlkZW50
aWZpZXIgbmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzXSBbNF0KRVJST1I6
IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzAxOiAgd2hhdF9hcmcgaXMgaW5jb3JyZWN0bHkg
bmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlkZW50aWZpZXIgbmFtZXMuICBb
cmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3Rm
L09wdGlvbmFsLmg6MzAyOiAgTWlzc2luZyBzcGFjZSBiZWZvcmUgeyAgW3doaXRlc3BhY2UvYnJh
Y2VzXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzA1OiAgYmFkX29wdGlv
bmFsX2FjY2VzcyBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGlu
IHlvdXIgaWRlbnRpZmllciBuYW1lcy4gIFtyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXNd
IFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDozMDU6ICB3aGF0X2FyZyBpcyBp
bmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGluIHlvdXIgaWRlbnRpZmll
ciBuYW1lcy4gIFtyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXNdIFs0XQpFUlJPUjogU291
cmNlL1dURi93dGYvT3B0aW9uYWwuaDozMDY6ICBNaXNzaW5nIHNwYWNlIGJlZm9yZSB7ICBbd2hp
dGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDozMTM6
ICBkdW1teV8gaXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5
b3VyIGlkZW50aWZpZXIgbmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzXSBb
NF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzE2OiAgTWlzc2luZyBzcGFjZSBi
ZWZvcmUgeyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09w
dGlvbmFsLmg6MzE2OiAgTWlzc2luZyBzcGFjZSBpbnNpZGUgeyB9LiAgW3doaXRlc3BhY2UvYnJh
Y2VzXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzE2OiAgc3RvcmFnZV90
IGlzIGluY29ycmVjdGx5IG5hbWVkLiBEb24ndCB1c2UgdW5kZXJzY29yZXMgaW4geW91ciBpZGVu
dGlmaWVyIG5hbWVzLiAgW3JlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3Jlc10gWzRdCkVSUk9S
OiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjMxOTogIHN0b3JhZ2VfdCBpcyBpbmNvcnJlY3Rs
eSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4g
IFtyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93
dGYvT3B0aW9uYWwuaDozMjQ6ICBNaXNzaW5nIHNwYWNlIGluc2lkZSB7IH0uICBbd2hpdGVzcGFj
ZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDozMzI6ICBNaXNz
aW5nIHNwYWNlIGJlZm9yZSB7ICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNl
L1dURi93dGYvT3B0aW9uYWwuaDozMzI6ICBNaXNzaW5nIHNwYWNlIGluc2lkZSB7IH0uICBbd2hp
dGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDozMzI6
ICBjb25zdGV4cHJfc3RvcmFnZV90IGlzIGluY29ycmVjdGx5IG5hbWVkLiBEb24ndCB1c2UgdW5k
ZXJzY29yZXMgaW4geW91ciBpZGVudGlmaWVyIG5hbWVzLiAgW3JlYWRhYmlsaXR5L25hbWluZy91
bmRlcnNjb3Jlc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjMzNTogIGNv
bnN0ZXhwcl9zdG9yYWdlX3QgaXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNj
b3JlcyBpbiB5b3VyIGlkZW50aWZpZXIgbmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVy
c2NvcmVzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzQ4OiAgTWlzc2lu
ZyBzcGFjZSBiZWZvcmUgeyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0KRVJST1I6IFNvdXJjZS9X
VEYvd3RmL09wdGlvbmFsLmg6MzQ4OiAgTWlzc2luZyBzcGFjZSBpbnNpZGUgeyB9LiAgW3doaXRl
c3BhY2UvYnJhY2VzXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MzQ4OiAg
b3B0aW9uYWxfYmFzZSBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVz
IGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4gIFtyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29y
ZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDozNjM6ICBvcHRpb25hbF9i
YXNlIGlzIGluY29ycmVjdGx5IG5hbWVkLiBEb24ndCB1c2UgdW5kZXJzY29yZXMgaW4geW91ciBp
ZGVudGlmaWVyIG5hbWVzLiAgW3JlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3Jlc10gWzRdCkVS
Uk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjM4ODogIE1pc3Npbmcgc3BhY2UgYmVmb3Jl
IHsgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25h
bC5oOjM4ODogIE1pc3Npbmcgc3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10g
WzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjM4ODogIGNvbnN0ZXhwcl9vcHRp
b25hbF9iYXNlIGlzIGluY29ycmVjdGx5IG5hbWVkLiBEb24ndCB1c2UgdW5kZXJzY29yZXMgaW4g
eW91ciBpZGVudGlmaWVyIG5hbWVzLiAgW3JlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3Jlc10g
WzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjQzNjogIFRoaXMgeyBzaG91bGQg
YmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBb
NF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NDQwOiAgQm9vbGVhbiBleHByZXNz
aW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMgc2hvdWxkIGhhdmUgdGhlaXIgb3BlcmF0b3Jz
IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcmlnaHQgc2lkZS4g
IFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25h
bC5oOjQ0MTogIFRoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGlu
ZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFs
Lmg6NDQyOiAgVXNlICdXVEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6bW92ZSgpJy4gIFtydW50
aW1lL3d0Zl9tb3ZlXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NDQ2OiAg
Y29udGFpbmVkX3ZhbCBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVz
IGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4gIFtyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29y
ZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo0NDc6ICBUaGlzIHsgc2hv
dWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNl
c10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjQ1MDogIFVzZSAnV1RGTW92
ZSgpJyBpbnN0ZWFkIG9mICdzdGQ6Om1vdmUoKScuICBbcnVudGltZS93dGZfbW92ZV0gWzRdCkVS
Uk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjQ1MDogIGNvbnRhaW5lZF92YWwgaXMgaW5j
b3JyZWN0bHkgbmFtZWQuIERvbid0IHVzZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlkZW50aWZpZXIg
bmFtZXMuICBbcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzXSBbNF0KRVJST1I6IFNvdXJj
ZS9XVEYvd3RmL09wdGlvbmFsLmg6NDU3OiAgY29udGFpbmVkX3ZhbCBpcyBpbmNvcnJlY3RseSBu
YW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4gIFty
ZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYv
T3B0aW9uYWwuaDo0NjE6ICBUaGlzIHsgc2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZp
b3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9P
cHRpb25hbC5oOjQ4NzogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNwYWNlL2JyYWNl
c10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjQ4NzogIE1pc3Npbmcgc3Bh
Y2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oOjQ4ODogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNwYWNl
L2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjQ4ODogIE1pc3Np
bmcgc3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3Vy
Y2UvV1RGL3d0Zi9PcHRpb25hbC5oOjUwMzogIFVzZSAnV1RGTW92ZSgpJyBpbnN0ZWFkIG9mICdz
dGQ6Om1vdmUoKScuICBbcnVudGltZS93dGZfbW92ZV0gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0
Zi9PcHRpb25hbC5oOjUyMDogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNwYWNlL2Jy
YWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjUyMDogIE1pc3Npbmcg
c3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2Uv
V1RGL3d0Zi9PcHRpb25hbC5oOjUyNjogIE1pc3Npbmcgc3BhY2UgYmVmb3JlIHsgIFt3aGl0ZXNw
YWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjUyNjogIE1p
c3Npbmcgc3BhY2UgaW5zaWRlIHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBT
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjUzNTogIFRoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVu
ZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNv
dXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NTQyOiAgVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwv
bm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVx
dWFsaXR5IGNvbXBhcmlzb25zLiAgW3JlYWRhYmlsaXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVd
CkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjU0NDogIFRlc3RzIGZvciB0cnVlL2Zh
bHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUg
d2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29ucy4gIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3Rv
X3plcm9dIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo1NDY6ICBUZXN0cyBm
b3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8vbm9uLXplcm8gc2hvdWxkIGFs
bCBiZSBkb25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnMuICBbcmVhZGFiaWxpdHkvY29t
cGFyaXNvbl90b196ZXJvXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NTU0
OiAgVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJv
IHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLiAgW3JlYWRh
YmlsaXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRp
b25hbC5oOjU1NjogIFRlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVy
by9ub24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29u
cy4gIFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm9dIFs1XQpFUlJPUjogU291cmNlL1dU
Ri93dGYvT3B0aW9uYWwuaDo1NTc6ICBVc2UgJ1dURk1vdmUoKScgaW5zdGVhZCBvZiAnc3RkOjpt
b3ZlKCknLiAgW3J1bnRpbWUvd3RmX21vdmVdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0
aW9uYWwuaDo1NTg6ICBUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHpl
cm8vbm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNv
bnMuICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196ZXJvXSBbNV0KRVJST1I6IFNvdXJjZS9X
VEYvd3RmL09wdGlvbmFsLmg6NTU5OiAgVXNlICdXVEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6
bW92ZSgpJy4gIFtydW50aW1lL3d0Zl9tb3ZlXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09w
dGlvbmFsLmg6NTY4OiAgVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91
cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0
aW9uYWwuaDo1NzE6ICBPbmUgbGluZSBjb250cm9sIGNsYXVzZXMgc2hvdWxkIG5vdCB1c2UgYnJh
Y2VzLiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlv
bmFsLmg6NTczOiAgT25lIGxpbmUgY29udHJvbCBjbGF1c2VzIHNob3VsZCBub3QgdXNlIGJyYWNl
cy4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25h
bC5oOjU5NDogIFRlc3RzIGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9u
b24temVybyBzaG91bGQgYWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29ucy4g
IFtyZWFkYWJpbGl0eS9jb21wYXJpc29uX3RvX3plcm9dIFs1XQpFUlJPUjogU291cmNlL1dURi93
dGYvT3B0aW9uYWwuaDo1OTU6ICBVc2UgJ1dURk1vdmUoKScgaW5zdGVhZCBvZiAnc3RkOjptb3Zl
KCknLiAgW3J1bnRpbWUvd3RmX21vdmVdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9u
YWwuaDo1OTc6ICBUZXN0cyBmb3IgdHJ1ZS9mYWxzZSwgbnVsbC9ub24tbnVsbCwgYW5kIHplcm8v
bm9uLXplcm8gc2hvdWxkIGFsbCBiZSBkb25lIHdpdGhvdXQgZXF1YWxpdHkgY29tcGFyaXNvbnMu
ICBbcmVhZGFiaWxpdHkvY29tcGFyaXNvbl90b196ZXJvXSBbNV0KRVJST1I6IFNvdXJjZS9XVEYv
d3RmL09wdGlvbmFsLmg6NTk4OiAgVXNlICdXVEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6bW92
ZSgpJy4gIFtydW50aW1lL3d0Zl9tb3ZlXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlv
bmFsLmg6NjAwOiAgVGVzdHMgZm9yIHRydWUvZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJv
L25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9uZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25z
LiAgW3JlYWRhYmlsaXR5L2NvbXBhcmlzb25fdG9femVyb10gWzVdCkVSUk9SOiBTb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oOjYwMTogIFVzZSAndXNpbmcgbmFtZXNwYWNlIHN0ZDsnIGluc3RlYWQg
b2YgJ3VzaW5nIHN0ZDo6c3dhcDsnLiAgW2J1aWxkL3VzaW5nX3N0ZF0gWzRdCkVSUk9SOiBTb3Vy
Y2UvV1RGL3d0Zi9PcHRpb25hbC5oOjYyNTogIFRoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBv
ZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNvdXJj
ZS9XVEYvd3RmL09wdGlvbmFsLmg6NjMwOiAgVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9m
IHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XQpFUlJPUjogU291cmNl
L1dURi93dGYvT3B0aW9uYWwuaDo2MzY6ICBCb29sZWFuIGV4cHJlc3Npb25zIHRoYXQgc3BhbiBt
dWx0aXBsZSBsaW5lcyBzaG91bGQgaGF2ZSB0aGVpciBvcGVyYXRvcnMgb24gdGhlIGxlZnQgc2lk
ZSBvZiB0aGUgbGluZSBpbnN0ZWFkIG9mIHRoZSByaWdodCBzaWRlLiAgW3doaXRlc3BhY2Uvb3Bl
cmF0b3JzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NjM3OiAgVGhpcyB7
IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9i
cmFjZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo2NDQ6ICBUaGlzIHsg
c2hvdWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2Jy
YWNlc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjY1MTogIFRoaXMgeyBz
aG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJh
Y2VzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NjU3OiAgQm9vbGVhbiBl
eHByZXNzaW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMgc2hvdWxkIGhhdmUgdGhlaXIgb3Bl
cmF0b3JzIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcmlnaHQg
c2lkZS4gIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9P
cHRpb25hbC5oOjY1ODogIFRoaXMgeyBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlv
dXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09w
dGlvbmFsLmg6NjYxOiAgVXNlICdXVEZNb3ZlKCknIGluc3RlYWQgb2YgJ3N0ZDo6bW92ZSgpJy4g
IFtydW50aW1lL3d0Zl9tb3ZlXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6
NzAzOiAgVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBb
d2hpdGVzcGFjZS9icmFjZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3
MTA6ICBCb29sZWFuIGV4cHJlc3Npb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcyBzaG91bGQg
aGF2ZSB0aGVpciBvcGVyYXRvcnMgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbGluZSBpbnN0ZWFk
IG9mIHRoZSByaWdodCBzaWRlLiAgW3doaXRlc3BhY2Uvb3BlcmF0b3JzXSBbNF0KRVJST1I6IFNv
dXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NzExOiAgVGhpcyB7IHNob3VsZCBiZSBhdCB0aGUgZW5k
IG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNdIFs0XQpFUlJPUjogU291
cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3MTg6ICBCb29sZWFuIGV4cHJlc3Npb25zIHRoYXQgc3Bh
biBtdWx0aXBsZSBsaW5lcyBzaG91bGQgaGF2ZSB0aGVpciBvcGVyYXRvcnMgb24gdGhlIGxlZnQg
c2lkZSBvZiB0aGUgbGluZSBpbnN0ZWFkIG9mIHRoZSByaWdodCBzaWRlLiAgW3doaXRlc3BhY2Uv
b3BlcmF0b3JzXSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6NzE5OiAgVGhp
cyB7IHNob3VsZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFj
ZS9icmFjZXNdIFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3NDQ6ICBNaXNz
aW5nIHNwYWNlIGluc2lkZSB7IH0uICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291
cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3NDY6ICBNaXNzaW5nIHNwYWNlIGluc2lkZSB7IH0uICBb
d2hpdGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3
NDg6ICBNaXNzaW5nIHNwYWNlIGluc2lkZSB7IH0uICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XQpF
UlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3NTI6ICBNaXNzaW5nIHNwYWNlIGluc2lk
ZSB7IH0uICBbd2hpdGVzcGFjZS9icmFjZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0
aW9uYWwuaDo3NTQ6ICBNaXNzaW5nIHNwYWNlIGluc2lkZSB7IH0uICBbd2hpdGVzcGFjZS9icmFj
ZXNdIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo3NjI6ICBUaGlzIHsgc2hv
dWxkIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNl
c10gWzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjc4MjogIFRoaXMgeyBzaG91
bGQgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2Vz
XSBbNF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6Nzk0OiAgVGhpcyB7IHNob3Vs
ZCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lICBbd2hpdGVzcGFjZS9icmFjZXNd
IFs0XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDo4MDE6ICBUaGlzIHsgc2hvdWxk
IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUgIFt3aGl0ZXNwYWNlL2JyYWNlc10g
WzRdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjgyNDogIFRoaXMgeyBzaG91bGQg
YmUgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSAgW3doaXRlc3BhY2UvYnJhY2VzXSBb
NF0KRVJST1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6ODM3OiAgVGVzdHMgZm9yIHRydWUv
ZmFsc2UsIG51bGwvbm9uLW51bGwsIGFuZCB6ZXJvL25vbi16ZXJvIHNob3VsZCBhbGwgYmUgZG9u
ZSB3aXRob3V0IGVxdWFsaXR5IGNvbXBhcmlzb25zLiAgW3JlYWRhYmlsaXR5L2NvbXBhcmlzb25f
dG9femVyb10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oOjg0NDogIFRlc3Rz
IGZvciB0cnVlL2ZhbHNlLCBudWxsL25vbi1udWxsLCBhbmQgemVyby9ub24temVybyBzaG91bGQg
YWxsIGJlIGRvbmUgd2l0aG91dCBlcXVhbGl0eSBjb21wYXJpc29ucy4gIFtyZWFkYWJpbGl0eS9j
b21wYXJpc29uX3RvX3plcm9dIFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDox
MjExOiAgTWlzc2luZyBzcGFjZSBiZWZvcmUgeyAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0KRVJS
T1I6IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmg6MTIxMTogIE1pc3Npbmcgc3BhY2UgaW5zaWRl
IHsgfS4gIFt3aGl0ZXNwYWNlL2JyYWNlc10gWzVdCkVSUk9SOiBTb3VyY2UvV1RGL3d0Zi9PcHRp
b25hbC5oOjEyMjI6ICBNaXNzaW5nIHNwYWNlIGJlZm9yZSB7ICBbd2hpdGVzcGFjZS9icmFjZXNd
IFs1XQpFUlJPUjogU291cmNlL1dURi93dGYvT3B0aW9uYWwuaDoxMjIyOiAgTWlzc2luZyBzcGFj
ZSBpbnNpZGUgeyB9LiAgW3doaXRlc3BhY2UvYnJhY2VzXSBbNV0KVG90YWwgZXJyb3JzIGZvdW5k
OiAxMDEgaW4gMyBmaWxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314089</attachid>
            <date>2017-06-28 19:17:57 -0700</date>
            <delta_ts>2017-06-28 19:17:57 -0700</delta_ts>
            <desc>Clang tidy headers + clang format</desc>
            <filename>bug-171632.diff</filename>
            <type>text/plain</type>
            <size>23756</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2ViYjljZTY5N2YuLmM4MmM0ZGI0MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE3
LTA2LTI4ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CisKKyAgICAgICAg
W1Rvb2xzXSBBZGQgc3VwcG9ydCBmb3IgY2xhbmctdGlkeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6CisgICAgICAg
ICogd3RmL0Fzc2VydGlvbnMuaDoKKyAgICAgICAgKFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAgICAgICogd3RmL0Jp
dFZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oOgorICAgICAgICAq
IHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oOgorICAgICAgICAqIHd0Zi9DdXJy
ZW50VGltZS5jcHA6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1lLmg6CisgICAgICAgICogd3Rm
L0RhdGFMb2cuY3BwOgorICAgICAgICAqIHd0Zi9EYXRhTG9nLmg6CisgICAgICAgICogd3RmL0Rh
dGVNYXRoLmNwcDoKKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguaDoKKyAgICAgICAgKiB3dGYvRGVj
aW1hbE51bWJlci5jcHA6CisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDoKKyAgICAgICAg
KiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAg
ICAgICAgKFdURjo6ZmFzdFplcm9lZE1hbGxvYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmZh
c3RTdHJEdXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0cnlGYXN0WmVyb2VkTWFsbG9jKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6aXNGYXN0TWFsbG9jRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OmZhc3RNYWxsb2NHb29kU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OmZhc3RBbGlnbmVkTWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dHJ5RmFzdEFsaWdu
ZWRNYWxsb2MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpmYXN0QWxpZ25lZEZyZWUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0cnlGYXN0TWFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6ZmFzdE1hbGxvYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRyeUZhc3RDYWxsb2MpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpmYXN0Q2FsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6ZmFzdEZyZWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpmYXN0UmVhbGxvYyk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUZvclRoaXNUaHJlYWQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcyk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmZhc3RNYWxsb2NTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
RmFzdE1hbGxvYy5oOgorICAgICAgICAqIHd0Zi9GaWxlUHJpbnRTdHJlYW0uaDoKKyAgICAgICAg
KiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi9HcmVnb3JpYW5EYXRlVGltZS5oOgorICAg
ICAgICAqIHd0Zi9IYXNoRnVuY3Rpb25zLmg6CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoK
KyAgICAgICAgKiB3dGYvTWVkaWFUaW1lLmg6CisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmNw
cDoKKyAgICAgICAgKiB3dGYvUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKiB3dGYvUmFuZG9tRGV2
aWNlLmNwcDoKKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyLmNwcDoKKyAgICAgICAgKiB3dGYv
UmFuZG9tTnVtYmVyU2VlZC5oOgorICAgICAgICAqIHd0Zi9TdHJpbmdFeHRyYXMuaDoKKyAgICAg
ICAgKiB3dGYvU3RyaW5nUHJpbnRTdHJlYW0uY3BwOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcu
aDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKiB3dGYvVmFyaWFu
dC5oOgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvV2Vha1JhbmRvbS5o
OgorICAgICAgICAqIHd0Zi9kdG9hLmNwcDoKKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRv
YS5jYzoKKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjOgorICAgICAgICAqIHd0
Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjOgorICAgICAgICAqIHd0Zi9kdG9hL2ZpeGVkLWR0
b2EuY2M6CisgICAgICAgICogd3RmL2R0b2Evc3RydG9kLmNjOgorICAgICAgICAqIHd0Zi9kdG9h
L3V0aWxzLmg6CisgICAgICAgICogd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oOgorICAgICAgICAq
IHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5jcHA6Cisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgICogd3RmL3RleHQvaWN1L1VUZXh0
UHJvdmlkZXIuY3BwOgorCiAyMDE3LTA2LTI4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHR5cG8gaW4gY29tbWVudDogV29yZFJlc3VsdCA9PiBXb3Jr
UmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IDkxNDIyMzhkZjMwLi4zMjdhYzY2YWZhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvQXNzZXJ0aW9ucy5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJBc3NlcnRp
b25zLmgiCiAKICNpbmNsdWRlICJDb21waWxlci5oIgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNs
dWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dpbmdBY2N1bXVsYXRvci5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5o
CmluZGV4IDMwZTBlMjY5NjZkLi5lNTc2YTA5NTMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaApAQCAtNDEs
MTAgKzQxLDEwIEBACiAKICN1bmRlZiBfX1NURENfRk9STUFUX01BQ1JPUwogI2RlZmluZSBfX1NU
RENfRk9STUFUX01BQ1JPUwotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYXJn
Lmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUg
PGNpbnR0eXBlcz4KKyNpbmNsdWRlIDxjc3RkYXJnPgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KICNp
bmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+CiAKICNpZiBVU0UoT1NfTE9HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5jcHAKaW5kZXggNzM2ZmY3ZDI4ZDQuLjAyOGY5NTdhOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJCaXRWZWN0b3IuaCIKIAogI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCmluZGV4IDhiNWI3NWEwY2QxLi44
ZjVjNGU5ZGVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKKysrIGIv
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgQml0
VmVjdG9yX2gKICNkZWZpbmUgQml0VmVjdG9yX2gKIAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaCBiL1NvdXJjZS9XVEYvd3RmL0NoZWNr
ZWRBcml0aG1ldGljLmgKaW5kZXggNzk4ZDZmMDdjZDAuLmUzYWY5MmMxNWI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKKyNpbmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPGxpbWl0cz4KLSNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KIAogLyogQ2hlY2tlZDxU
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgKaW5k
ZXggOGU5ZjI3MWYxYzYuLjExNDFhMGEwZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9D
cnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV1RG
X0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyX2gKICNkZWZpbmUgV1RGX0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyX2gKIAotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGNz
dGRpbnQ+CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9D
dXJyZW50VGltZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKaW5kZXggNzFh
ZmViZTQ0MTUuLjRhZGRlZDkyYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50
VGltZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCkBAIC00OCwxMCAr
NDgsMTAgQEAKIC8vIGJlaW5nIGRlZmluZWQuCiAvLyBJZiBkZWZpbmVkLCBXSU4zMl9MRUFOX0FO
RF9NRUFOIGRpc2FibGVzIHRpbWVCZWdpblBlcmlvZC90aW1lRW5kUGVyaW9kLgogI3VuZGVmIFdJ
TjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc3RkaW50Pgor
I2luY2x1ZGUgPGN0aW1lPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxtYXRoLmg+
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICNpbmNsdWRl
IDxzeXMvdGltZS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DdXJyZW50
VGltZS5oIGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuaAppbmRleCA3NGIyMzZmNzkxOC4u
YWRiYjQ5ZWExZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmgKKysr
IGIvU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuaApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmlu
ZSBDdXJyZW50VGltZV9oCiAKICNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8dGltZS5oPgor
I2luY2x1ZGUgPGN0aW1lPgogCiBuYW1lc3BhY2UgV1RGIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvRGF0YUxvZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAppbmRleCBh
MmU3ZDRmZDIwNC4uM2FmNjY2NTY3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RhdGFM
b2cuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCkBAIC0yNSwxNCArMjUsMTUg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRl
IDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGNzdGRhcmc+Cisj
aW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CiAj
aW5jbHVkZSA8d3RmL0ZpbGVQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZWRQcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+Ci0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8dGhyZWFkPgogCiAjaWYgT1Mo
VU5JWCkgfHwgT1MoREFSV0lOKQogI2luY2x1ZGUgPHVuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvRGF0YUxvZy5oIGIvU291cmNlL1dURi93dGYvRGF0YUxvZy5oCmluZGV4IDRi
ZTk0ODE2ZDVhLi5lOTcwMzUwZGJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRGF0YUxv
Zy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaApAQCAtMjYsOCArMjYsOCBAQAogI2lm
bmRlZiBEYXRhTG9nX2gKICNkZWZpbmUgRGF0YUxvZ19oCiAKLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGNzdGRhcmc+CisjaW5jbHVkZSA8Y3N0ZGlv
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNl
L1dURi93dGYvRGF0ZU1hdGguY3BwCmluZGV4IDU3ZTI0ZGRmNGVkLi40NzVjZmU0YmYyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0RhdGVNYXRoLmNwcApAQCAtODAsMTAgKzgwLDEwIEBACiAjaW5jbHVkZSAiU3RyaW5nRXh0cmFz
LmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSA8Y2xpbWl0cz4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGN0aW1lPgogI2luY2x1
ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgT1MoV0lORE9XUykKQEAgLTkx
LDcgKzkxLDcgQEAKICNlbmRpZgogCiAjaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUgPGVycm5v
Lmg+CisjaW5jbHVkZSA8Y2Vycm5vPgogI2VuZGlmCiAKICNpZiBIQVZFKFNZU19USU1FX0gpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oIGIvU291cmNlL1dURi93dGYvRGF0
ZU1hdGguaAppbmRleCBhZmZiNTU4NjkxNC4uNTM1NmRlYjg0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0RhdGVNYXRoLmgKKysrIGIvU291cmNlL1dURi93dGYvRGF0ZU1hdGguaApAQCAt
NDMsMTAgKzQzLDEwIEBACiAjaWZuZGVmIERhdGVNYXRoX2gKICNkZWZpbmUgRGF0ZU1hdGhfaAog
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc3Rk
aW50PgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Y3RpbWU+CiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3BwIGIvU291cmNlL1dURi93dGYv
RGVjaW1hbE51bWJlci5jcHAKaW5kZXggZDMzYTVhZTRjZTIuLjQxM2RlMWMwM2ZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9EZWNpbWFsTnVtYmVyLmNwcApAQCAtMjUsNyArMjUsOCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGVjaW1hbE51bWJlci5oIgotI2luY2x1ZGUgPG1hdGguaD4KKworI2lu
Y2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxO
dW1iZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuaAppbmRleCAxODE5MTEwNzk0
Zi4uNzI2YTVlNjY0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmgKQEAgLTI2LDkgKzI2LDkgQEAK
ICNpZm5kZWYgRGVjaW1hbE51bWJlcl9oCiAjZGVmaW5lIERlY2ltYWxOdW1iZXJfaAogCi0jaW5j
bHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisjaW5jbHVkZSA8Y21hdGg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRW
ZWN0b3IuaAppbmRleCA5MTE5YTFkNTExMi4uODM1MTRhZjhjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVj
dG9yLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvU291cmNlL1dURi93dGYv
RmFzdE1hbGxvYy5jcHAKaW5kZXggZmExZDRiMDY1YTcuLmYwOGE5OWM1NzYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcApAQCAtMjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ2hlY2tlZEFyaXRobWV0
aWMuaCIKICNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdE1h
bGxvYy5oIGIvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCmluZGV4IDUyNWY5Y2JhZmQ1Li41
ZTE1MGQyOWUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuaApAQCAtMjEsOCArMjEsOCBAQAogI2lmbmRlZiBX
VEZfRmFzdE1hbGxvY19oCiAjZGVmaW5lIFdURl9GYXN0TWFsbG9jX2gKIAorI2luY2x1ZGUgPGNz
dGRsaWI+CiAjaW5jbHVkZSA8bmV3PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9GaWxlUHJpbnRTdHJlYW0uaCBiL1NvdXJjZS9XVEYvd3RmL0ZpbGVQcmludFN0cmVh
bS5oCmluZGV4IGNmODIyMjE3MjdiLi4yOWUwNWQxMzNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRmlsZVByaW50U3RyZWFtLmgKKysrIGIvU291cmNlL1dURi93dGYvRmlsZVByaW50U3Ry
ZWFtLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRmlsZVByaW50U3RyZWFtX2gKICNkZWZp
bmUgRmlsZVByaW50U3RyZWFtX2gKIAotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3N0
ZGlvPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0Zvcndh
cmQuaAppbmRleCA2ZmJjYmVlYzcxMi4uNGY2ZmRiYzU2MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTIwLDcg
KzIwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRl
IDxjc3RkZGVmPgogCiBuYW1lc3BhY2Ugc3RkIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IG9wdGlvbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUu
aCBiL1NvdXJjZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmgKaW5kZXggNDlmYWRmMjdiOWMu
LjE0ZDJkNjMxYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGlt
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmgKQEAgLTI1LDggKzI1
LDggQEAKICNpZm5kZWYgV1RGX0dyZWdvcmlhbkRhdGVUaW1lX2gKICNkZWZpbmUgV1RGX0dyZWdv
cmlhbkRhdGVUaW1lX2gKIAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4K
KyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGN0aW1lPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hGdW5jdGlvbnMuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAppbmRleCBh
ZjBhNTFmODk3OC4uMmNkNDc0ZGVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hG
dW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgKQEAgLTIxLDcg
KzIxLDcgQEAKICNpZm5kZWYgV1RGX0hhc2hGdW5jdGlvbnNfaAogI2RlZmluZSBXVEZfSGFzaEZ1
bmN0aW9uc19oCiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxjc3RkaW50PgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKaW5kZXggN2Y0ZmE5ZmIzMDEuLmExMjNkYzM1OGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMjIs
OSArMjIsOSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8
Y3N0cmluZz4KICNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5Pgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9N
YWluVGhyZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMTRiMzQ2NzNh
MGIuLmUzYTVjZjZiZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgK
KysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCkBAIC0zMCw3ICszMCw3IEBACiAjaWZu
ZGVmIE1haW5UaHJlYWRfaAogI2RlZmluZSBNYWluVGhyZWFkX2gKIAotI2luY2x1ZGUgPHN0ZGlu
dC5oPgorI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCmluZGV4IGRjZWYzOTQ4YWIxLi41MmFmNDlhY2M3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaApA
QCAtMjcsMTEgKzI3LDExIEBACiAjZGVmaW5lIFdURl9NYXRoRXh0cmFzX2gKIAogI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjZmxvYXQ+CiAjaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVk
ZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIE9TKFNPTEFSSVMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZWRpYVRpbWUuaCBiL1NvdXJjZS9XVEYvd3RmL01lZGlhVGlt
ZS5oCmluZGV4IGE3Yjc0NTdmMmJhLi5lZGZkMGIxYTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvTWVkaWFUaW1lLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVkaWFUaW1lLmgKQEAgLTMy
LDkgKzMyLDggQEAKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiAjaW5jbHVkZSA8Y21h
dGg+CisjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwIGIvU291cmNlL1dURi93dGYvUHJpbnRT
dHJlYW0uY3BwCmluZGV4IDk3ZmFmMzAzMTg5Li40MGFiZmMyNTZhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ByaW50U3Ry
ZWFtLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlByaW50U3RyZWFtLmgiCiAKLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGNzdGRpbz4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVl
ZFN0cmluZ0ltcGwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QcmludFN0
cmVhbS5oCmluZGV4IDZhODA2MGIxZDU3Li5jM2Y3YTNlOGRjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUHJpbnRTdHJlYW0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5o
CkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFByaW50U3RyZWFtX2gKICNkZWZpbmUgUHJpbnRT
dHJlYW1faAogCisjaW5jbHVkZSA8Y3N0ZGFyZz4KICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVk
ZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1JhbmRvbURldmljZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21EZXZp
Y2UuY3BwCmluZGV4IDYxZDYwNTc4ODExLi5mMTE4MWYxNTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUmFuZG9tRGV2aWNlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21EZXZp
Y2UuY3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmFuZG9tRGV2aWNlLmgiCiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGNzdGRsaWI+CiAKICNpZiAhT1MoREFS
V0lOKSAmJiBPUyhVTklYKQogI2luY2x1ZGUgPGVycm5vLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9SYW5kb21OdW1iZXIuY3BwIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyLmNw
cAppbmRleCBkMzkwMzVlNjFmNy4uMzc0NTUxNzM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1JhbmRvbU51bWJlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyLmNw
cApAQCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuaCIKICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCiAKKyNpbmNsdWRlIDxjbGlt
aXRzPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxs
aW1pdHM+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9SYW5kb21OdW1iZXJTZWVkLmggYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVk
LmgKaW5kZXggNTllNzdiNTU2MTAuLjJmM2M4MjI4MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVy
U2VlZC5oCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFdURl9SYW5kb21OdW1iZXJTZWVkX2gK
ICNkZWZpbmUgV1RGX1JhbmRvbU51bWJlclNlZWRfaAogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3RpbWU+CiAK
ICNpZiBIQVZFKFNZU19USU1FX0gpCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1N0cmluZ0V4dHJhcy5oIGIvU291cmNlL1dURi93dGYvU3RyaW5nRXh0
cmFzLmgKaW5kZXggNjc5N2QyY2UxMWEuLjMzMjE2YWI5MzhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9TdHJpbmdFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdFeHRyYXMu
aApAQCAtMjcsOSArMjcsOSBAQAogI2lmbmRlZiBXVEZfU3RyaW5nRXh0cmFzX2gKICNkZWZpbmUg
V1RGX1N0cmluZ0V4dHJhc19oCiAKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGNzdGRhcmc+CisjaW5jbHVkZSA8
Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAKICNpZiBIQVZFKFNUUklOR1NfSCkgCiAjaW5j
bHVkZSA8c3RyaW5ncy5oPiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50
U3RyZWFtLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmNwcAppbmRleCA2
YTg4ODFjNWJiZC4uNzY1OWFmNjk3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5j
cHAKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJp
bmdQcmludFN0cmVhbS5oIgogCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxjc3RkYXJnPgorI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAppbmRleCAzMzcyYWMxMmVkOC4uYTQ3OTM3ZmE0MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0zMSw4
ICszMSw4IEBACiAjaWZuZGVmIFRocmVhZGluZ19oCiAjZGVmaW5lIFRocmVhZGluZ19oCiAKKyNp
bmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHN0ZGludC5oPgog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdXaW4uY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCBiZDYxNWZi
OTJjNi4uODdkYjZiYmIwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dp
bi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtOTksNyArOTks
NyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKICNpZiBIQVZFKEVS
Uk5PX0gpCi0jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjZXJybm8+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmggYi9T
b3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgKaW5kZXggZjY0MDVhYTE4OGQuLjBjMTRkNzYxYjc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgKKysrIGIvU291cmNlL1dURi93dGYv
VmFyaWFudC5oCkBAIC0zOSwxMCArMzksMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
IDxjbGltaXRzPgorI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNp
bmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxuZXc+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+CiAj
aW5jbHVkZSA8c3RkZXhjZXB0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx0eXBlX3Ry
YWl0cz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93
dGYvVmVjdG9yLmgKaW5kZXggZTE1ZjY1YzU3YmMuLjVmMWQ0MmYyOWVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAt
MjEsOSArMjEsOSBAQAogI2lmbmRlZiBXVEZfVmVjdG9yX2gKICNkZWZpbmUgV1RGX1ZlY3Rvcl9o
CiAKKyNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmggYi9Tb3VyY2UvV1RGL3d0
Zi9XZWFrUmFuZG9tLmgKaW5kZXggNGQ1OWU0NGMwNmUuLmU4NmQ5YmNkOWQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgKKysrIGIvU291cmNlL1dURi93dGYvV2Vha1Jh
bmRvbS5oCkBAIC0zMSw3ICszMSw3IEBACiAjaWZuZGVmIFdlYWtSYW5kb21faAogI2RlZmluZSBX
ZWFrUmFuZG9tX2gKIAotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGNsaW1pdHM+CiAj
aW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9kdG9hLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2R0b2EuY3BwCmluZGV4IDgyM2IxNjFiM2FkLi4xNTllNmFiN2Ey
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvZHRvYS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJkdG9hLmgiCiAKLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGNzdGRpbz4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZHRvYS9iaWdu
dW0tZHRvYS5jYyBiL1NvdXJjZS9XVEYvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKaW5kZXggYjU4
YWExNDU4MjEuLmRkZjU2MjFlYjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL2Jp
Z251bS1kdG9hLmNjCisrKyBiL1NvdXJjZS9XVEYvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8bWF0aC5o
PgorI2luY2x1ZGUgPGNtYXRoPgogCiAjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIGIvU291cmNlL1dURi93
dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCmluZGV4IDQ4ZjNmM2VkMGNmLi41MGI0OWJlNTFkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYwpAQCAtMjcsOSArMjcsOSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKyNpbmNsdWRlIDxj
bWF0aD4KKyNpbmNsdWRlIDxjc3RkYXJnPgogCiAjaW5jbHVkZSAidXRpbHMuaCIKICNpbmNsdWRl
ICJjYWNoZWQtcG93ZXJzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmNjIGIvU291cmNlL1dURi93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5j
YwppbmRleCA2YmYzNjAyNDVjZC4uZmNhOTg5ODhiMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKKysrIGIvU291cmNlL1dURi93dGYvZHRvYS9k
b3VibGUtY29udmVyc2lvbi5jYwpAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgImZpeGVkLWR0
b2EuaCIKICNpbmNsdWRlICJzdHJ0b2QuaCIKICNpbmNsdWRlICJ1dGlscy5oIgotI2luY2x1ZGUg
PGxpbWl0cy5oPgotI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjbGltaXRzPgorI2luY2x1
ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZHRvYS9maXhlZC1kdG9hLmNjIGIvU291cmNl
L1dURi93dGYvZHRvYS9maXhlZC1kdG9hLmNjCmluZGV4IDQ1YmE3M2MwYWE2Li4xZjA4MGRlZGVj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS9maXhlZC1kdG9hLmNjCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8Y21hdGg+CiAK
ICNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCiAjaW5jbHVkZSAiZG91YmxlLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1NvdXJjZS9XVEYvd3RmL2R0b2Evc3Ry
dG9kLmNjCmluZGV4IDUyNzBjM2U1OTU4Li4yYWI5MWI2Njg5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvZHRvYS9zdHJ0b2QuY2MKKysrIGIvU291cmNlL1dURi93dGYvZHRvYS9zdHJ0b2Qu
Y2MKQEAgLTI3LDggKzI3LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8
c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKyNpbmNs
dWRlIDxjc3RkYXJnPgogCiAjaW5jbHVkZSAic3RydG9kLmgiCiAjaW5jbHVkZSAiYmlnbnVtLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9kdG9hL3V0aWxzLmgKaW5kZXggODg5NjQyY2VlNzIuLmM4ZjcyM2Q4ODk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvZHRvYS91
dGlscy5oCkBAIC0yOCw5ICsyOCw5IEBACiAjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX1VUSUxT
X0hfCiAjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX1VUSUxTX0hfCiAKKyNpbmNsdWRlIDxjc3Rk
bGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2RlZmluZSBVTklNUExF
TUVOVEVEIEFTU0VSVF9OT1RfUkVBQ0hFRAogI2RlZmluZSBVTlJFQUNIQUJMRSBBU1NFUlRfTk9U
X1JFQUNIRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmgKaW5kZXggZWI1NDgyOGEyOGUu
LjgyOTM2OWFiYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBh
dGguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaApAQCAtMjIsNyAr
MjIsNyBAQAogI2lmbmRlZiBBU0NJSUZhc3RQYXRoX2gKICNkZWZpbmUgQVNDSUlGYXN0UGF0aF9o
CiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPHVu
aWNvZGUvdXR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0xDaGFyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2
NC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKaW5kZXggMmFlNWRlMjIyY2Qu
LjFjMDY3Y2U1ZDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAKLSNpbmNsdWRlIDxsaW1p
dHMuaD4KKyNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9DU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAK
aW5kZXggMjFiMzdlYmE4YzIuLjFlMDhmNmYwYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0NTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU3RyaW5n
LmgiCiAKLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUg
PHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmgKaW5kZXggYWZmYjdlMTk1YjIuLjQxYWE0MmRmNDdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFN0cmluZ0NvbmNhdGVuYXRlX2gKICNkZWZpbmUgU3RyaW5nQ29uY2F0ZW5hdGVfaAogCi0jaW5j
bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KIAogI2lmbmRlZiBBdG9taWNTdHJp
bmdfaAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaAppbmRleCAxZDFhMjU0M2FmZS4uYTNmY2MxZmFiZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaWZuZGVmIFN0cmluZ0ltcGxfaAogI2RlZmlu
ZSBTdHJpbmdJbXBsX2gKIAotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGNsaW1pdHM+
CiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCmlu
ZGV4IDNkZDY3NWJjZmEzLi42MTIxOTBhYzgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdWaWV3LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgK
QEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgU3RyaW5nVmlld19oCiAjZGVmaW5lIFN0cmluZ1Zp
ZXdfaAogCi0jaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8Y2xpbWl0cz4KICNpbmNsdWRl
IDx1bmljb2RlL3V0eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IGRiZTZlZWFi
MTcxLi4yMDBhZjcyZmI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtMjMsMTYg
KzIzLDE2IEBACiAjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCiAKICNpbmNsdWRlICJJbnRlZ2VyVG9T
dHJpbmdDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8Y3N0ZGFy
Zz4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3
dGYvdW5pY29kZS9VVEY4Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvaWN1
L1VUZXh0UHJvdmlkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRl
ci5jcHAKaW5kZXggNzM4OGZkYmY3Y2EuLmFhNjJiNmMyOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlVU
ZXh0UHJvdmlkZXIuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgV1RGIHsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>